我写了一些代码:
function renderGreeting(Elem: React.Component<any, any>) {
return <span>Hello, <Elem />!</span>;
}
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
JSX元素类型
Elem
没有任何构造或调用签名
这是什么意思?
我在我的应用程序中使用React-Navigation,该应用程序包含多个屏幕的StackNavigator,其中一些屏幕具有TextInput, autoFocus={true}
问题:在组件渲染时在这些屏幕上,屏幕的高度在构造函数中设置:
constructor(props) {
super(props);
this.state = {
height: Dimensions.get('window').height,
};
}
Run Code Online (Sandbox Code Playgroud)
但是,由于autoFocus
TextInput是true
,因此在渲染后,屏幕上的键盘几乎立即弹出,导致组件重新渲染,因为在componentWillMount中添加到Keyboard的eventListener:
componentWillMount() {
this.keyboardWillShowListener = Keyboard.addListener(
"keyboardWillShow",
this.keyboardWillShow.bind(this)
);
}
keyboardWillShow(e) {
this.setState({
height:
Dimensions.get("window").height * 0.9 - e.endCoordinates.height
});
LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);
}
Run Code Online (Sandbox Code Playgroud)
这会影响性能,我希望避免不必要的重新渲染.
问题:
1.是否可以在React-Navigation的ScreenProps中设置键盘的动态高度(取决于设备)?
2. React-Navigation的state.params是否可以这样做?
3.除了应用KeyboardAvoidingView或此模块之外,还有其他方法可以解决此问题吗?
我有这个:
type Two = {
one: number,
two: string,
three: boolean
}
Run Code Online (Sandbox Code Playgroud)
我希望它创建一个看起来像这样的类型:
type RenamedTwo = {
one: number,
two: string,
four: boolean // difference
}
Run Code Online (Sandbox Code Playgroud)
试图以这种方式创建它:
type Rename<T, K extends keyof T, N> = Pick<T, Exclude<keyof T, K>> & { [N]: T[K] }
Run Code Online (Sandbox Code Playgroud)
尝试使用这种方式:
type Renamed = Rename<Two, 'three', 'four'>
Run Code Online (Sandbox Code Playgroud)
但是 TSlint 标记[N]
为错误并给出以下错误消息:
[ts] 类型文字中的计算属性名称必须引用类型为文字类型或“唯一符号”类型的表达式。[ts] 'N' 仅指一种类型,但在此处用作值。
我正在开发一个React-Native应用程序,该应用程序是使用Expo安装的,它使用以下代码创建.babelrc配置:
{
"presets": ["babel-preset-expo"],
"env": {
"development": {
"plugins": ["transform-react-jsx-source"]
}
}
}
Run Code Online (Sandbox Code Playgroud)
最近,我遇到了另外两个需要安装其他类型的babel预设的库,它们分别名为:"react-native"
和"flow"
。
问题:如何合并3个预设?
我正在尝试组合一个类型,与之类似Pick
,它将从对象类型中删除某些属性.
它应该这样工作:
type ObjectType = {
key1: number,
key2: string,
key3: boolean,
key4: number[]
}
let obj: Remove<ObjectType, 'key2' | 'key4'>
Run Code Online (Sandbox Code Playgroud)
这里obj
的类型应该是:{key1:number,key3:boolean}
我正在研究后端编程,特别是 Node.js 和 ExpressJS,目前让我感到困惑的是 cookie-session 库的“keys”道具如何帮助我们?它的意义何在?已经阅读了许多与身份验证、会话等相关的不同材料,但是这个特定问题的答案对我来说仍然是模棱两可的。
有人能给我一个深入的解释,最好是两种方式:简单的术语和使用编程词典,关于这个主题?
我试图找到一种方法来检查我的项目中是否通过终端安装了特定的包.那是否有命令?有点像npm check redux
.
我有一个枚举:
enum MyEnum {
One,
Two,
Three
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个 React Component 方法,它应该返回一个对象,其键只能是 MyEnum 的字符串键(意思是,到目前为止:一、二、三):
myFunction = (someValue: {}[]): {} => {
return someValue.reduce((res, v, i) => {
res[v.name].push(v)
return res
}, {})
}
Run Code Online (Sandbox Code Playgroud)
问题:如何动态定义该函数的返回值类型为对象,其键只能是MyEnum的字符串键?
现在只有 3 个,但是如果我向枚举中添加另一个,则 myFunction 返回值的类型也应该更新。
更新1:
尝试分配Record<keyof typeof MyEnum, any>
作为返回值:
myMethod = (someValue: {}[]): Record<keyof typeof MyEnum, any> => {
return someValue.reduce((res: any, v: SomeInterface) => {
res[v.name].push(v)
return res
}, {})
}
Run Code Online (Sandbox Code Playgroud)
这不会引发任何错误,但是如果我将reduce的返回值分配给一个变量,然后在其上添加另一个属性(其键不是MyEnum键),则不会出现错误,这不是我所寻求的:
myMethod = (someValue: {}[]): Record<keyof typeof MyEnum, any> => …
Run Code Online (Sandbox Code Playgroud) 不引用 SERIAL id。
就像是:
delete from users LAST 3
Run Code Online (Sandbox Code Playgroud)
这将从表中删除最后 3 行。
typescript ×4
javascript ×2
react-native ×2
reactjs ×2
babel ×1
cookies ×1
expo ×1
express ×1
keyboard ×1
material-ui ×1
node.js ×1
npm ×1
passport.js ×1
postgresql ×1
terminal ×1