React Native TextInput没有获得焦点

ble*_*meh 5 react-native

我有一个简单的代码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)

I P*_*ana 5

所以我的假设是正确的。尝试聚焦失败,调用this._input时不包含任何内容componentDidMount,因为render函数仍未调用且没有引用。

因此,目前的解决方案是将其延迟一点,直到渲染函数已被调用。

那就是为什么将代码包装在setTimeout函数内部很有帮助。无论如何,我承认,这有点棘手。如果有人找到更好的方法,那就太好了。

componentDidMount() {
   setTimeout(() => this._input.focus(), 250);
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!您的解决方案是我发现有效的独特解决方案。但是 componentDidMount() 是在 render() 方法之后调用的,所以你的解释是错误的。另外,您可以将超时设置为 0,该解决方案仍然有效。我很好奇这种行为背后的原因。 (2认同)