我有一个简单的代码TextInput,我希望它在首次渲染和提交时得到关注。但是,它根本没有得到关注。
render() {
return (
<TextInput
ref={(c) => this._input = c}
style={[styles.item, this.props.style]}
placeholder={"New Skill"}
onChangeText={(text) => {
this.setState({text})
}}
onSubmitEditing={(event) => {
this.props.onSubmitEditing(this.state.text);
this._input.clear();
this._input.focus();
}}
/>
);
}
componentDidMount() {
this._input.focus();
}
Run Code Online (Sandbox Code Playgroud)
所以我的假设是正确的。尝试聚焦失败,调用this._input时不包含任何内容componentDidMount,因为render函数仍未调用且没有引用。
因此,目前的解决方案是将其延迟一点,直到渲染函数已被调用。
那就是为什么将代码包装在setTimeout函数内部很有帮助。无论如何,我承认,这有点棘手。如果有人找到更好的方法,那就太好了。
componentDidMount() {
setTimeout(() => this._input.focus(), 250);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1798 次 |
| 最近记录: |