React-Native TextInput阻止受控输入的默认设置

时间:2019-05-26 20:50:39

标签: reactjs react-native input state textinput

因此,我使用状态来控制文本输入,但是当我输入字符时,我不希望该字符立即显示。这是正在发生的事情: 1.我专注于文字输入 2.我输入一个字符。 3.字符快速显示在文本输入中。 4.字符迅速消失,并且由于状态尚未更改,值又返回到状态。

我想知道如果状态没有改变,如何防止角色首先出现。

这是一个简单的例子:

state = {
 myValue: 'hello'
}

changedText = value => {
  //Nothing here yet
}

...
render(){
  return(
    <Input
      value={this.state.myValue}
      keyboardType="numeric"
      onChangeText={this.highIntervalDurationChange}
    />
  );
}

如您所见,它并不复杂,我只是想找出一种方法,使按下的字符不会立即出现,因为当前它会出现并返回到状态。 (很明显,在弄清楚如何防止默认值发生后,我将修改状态。)我还尝试将editable设置为false,但这只是使它成为可能,所以我根本无法对其进行编辑。谢谢!

3 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

问题在于您的input = this.state.myValue的价值。记住react-native是react https://reactjs.org/docs/forms.html#controlled-components。由于状态未更新,因此输入不会自行更新。您看到的小变化是本机输入收到新值,但请记住,此值比值始终是hello状态的原因。看起来好像没有更新,因为您没有在changeText内调用它。

state = {
 myValue: 'hello'
}

changedText = value => {
  this.setState({ myValue: value })
}

...
render(){
  return(
    <Input
      value={this.state.myValue}
      keyboardType="numeric"
      onChangeText={this.changedText}
    />
  );
}

答案 2 :(得分:0)

您没有正确调用TextInput的onChangeText。将下面的代码与您的代码进行比较。

private Node createVideoDisplay(final AnchorNode parent, Vector3 localPosition, String title) {
       // Create a node to render the video and add it to the anchor.
       Node videoNode = new Node();
       videoNode.setParent(parent);
       videoNode.setLocalPosition(localPosition);

       // Set the scale of the node so that the aspect ratio of the video is correct.
       float videoWidth = mediaPlayer.getVideoWidth();
       float videoHeight = mediaPlayer.getVideoHeight();
       videoNode.setLocalScale(
               new Vector3(
                       VIDEO_HEIGHT_METERS * (videoWidth / videoHeight),
                       VIDEO_HEIGHT_METERS, 1.0f));

       // Place the text above the video
       final float videoNodeHeight = VIDEO_HEIGHT_METERS+ localPosition.y;
       ViewRenderable.builder().setView(this,R.layout.video_title)
               .build().thenAccept(viewRenderable -> {
                  Node titleNode =  new Node();
                  titleNode.setLocalPosition(new Vector3(0,videoNodeHeight,0));
                  titleNode.setParent(parent);
                  titleNode.setRenderable(viewRenderable);
           ((TextView)viewRenderable.getView().findViewById(R.id.video_text))
                          .setText(title);
       });

       return videoNode;
   }