如何使用React Native中的引用更改TextInput的值?

时间:2019-01-16 09:39:38

标签: javascript reactjs react-native

我正在使用React Native 0.57.8和React 16.7.0。我正在为Android TV创建一个屏幕键盘,它将用作库。我有一个TextInput被分配了一个参考。如何使用此引用来更改value中的TextInput

constructor(props) {
  super(props);
  this.emailRef = React.createRef();
}

<TextInput
  ref={this.emailRef}
  placeHolder="Email Address"
  blurOnSubmit={false}
/>

<Keyboard textInput={this.emailRef} />

在图书馆内:

<Button
  text="change value"
  onPress={() => {
    this.props.emailRef.current.props.value =
      this.props.emailRef.current.props.value + "q";
  }}
/>

4 个答案:

答案 0 :(得分:1)

您不能直接在组件内更改道具-道具只能从父组件中派生而不能修改,因此您不能这样做:

this.props.emailRef.current.props.value = this.props.emailRef.current.props.value + "q";

此外,您在库中引用this.props.emailRef,而键盘没有emailRef道具-它有textInput道具。

尝试一下:

constructor(props) {
  super(props);
  this.emailRef = React.createRef();
  this.state = {
    value: "Initial Input"
  };
  this.handleInput = this.handleInput.bind(this);
}

handleInput(input) {
  this.setState({ value: input });
}

render() {
  return (
    ...
      <Keyboard textInput={this.emailRef} onInput={this.handleInput} />
      <TextInput ref={this.emailRef} value={this.state.value} />
    ...
  );
}

在图书馆内:

<Button
  text="change value"
  onClick={() => {
    this.props.onInput(this.props.textInput.current.props.value + "q");
  }}
/>

答案 1 :(得分:1)

在状态方法中设置文本,然后在按下的按钮中更新状态

然后在这样的文本中设置

<Text>
       {this.state.myText}
    </Text>

答案 2 :(得分:0)

我认为您需要的是受控输入。 这是我的处理方式:

constructor(props) {
  super(props);
  this.emailRef = React.createRef(); // might not need this
  this.state = {
    value: ''
  }
}

<TextInput
  value={this.state.value}
  onChangeText={(text) => this.setState({text})}
  placeHolder="Email Address"
  blurOnSubmit={false}
/>

<Button
  text="change value"
  onPress={() => {
    // just use `this.state.value` to do whatever you need with it
  }}
/>

答案 3 :(得分:0)

使用状态他们都说不知道为什么我需要在不使用状态的情况下更新 UI。在我的例子中,文本输入使用状态,当输入非常快时,异步状态和 UI 更新滞后于输入速度,光标滞后几个字母,导致输入错误。防止这种情况的唯一方法是不使用任何状态!如果不使用状态,则不能在不将其设为只读的情况下为文本输入提供初始值。为了给 TextInput 一个初始值,我们可以使用 ref 并在组件安装事件上以编程方式设置本机道具。像这样:

const setInitialBio = React.useCallback(() => {
    if(inputRef.current) {
        inputRef.current.setNativeProps({ text: "initial value goes here" })
    }
}, []);