【问题标题】:React Native - Can't modify text in TextInput onChangeText callback on AndroidReact Native - 无法在 Android 上的 TextInput onChangeText 回调中修改文本
【发布时间】:2019-02-20 21:52:54
【问题描述】:

由于 React Native 中一个有据可查的问题,TextInput 的 autoCapitalize 在 Android 上无法正常工作。我试图通过手动大写 onChangeText() 回调中的文本来解决这个问题:

onchgtext(newval)
{
  this.s8 = newval.toUpperCase();
  this.forceUpdate();
}

render()
{
   ...
   <TextInput value={ this.s8 } 
      onChangeText={ (newval) => { this.onchgtext(newval) } } 
      ...
   />
   ...
}

不幸的是,修改文本会导致 TextInput 无法正常工作:alternate 击键会导致整个先前的文本被复制,但前提是击键是小写的。

所以,输入1234 会导致1234 出现;输入ABCD 导致ABCD 出现;但输入abcd 会导致AABCAABCD

任何想法为什么会发生这种情况,以及如何解决它?请注意,使用 onChange 而不是 onChangeText 会导致相同的行为。

【问题讨论】:

  • 解决了这个问题吗?实际上,我面临同样的问题,在我的案例编号、大写字母、小写字母中,任何内容都没有更新 TextInput。
  • Umair,您的问题似乎有所不同。就我而言,回调被调用得很好,但是当我修改回调中的文本时,事情变得很糟糕。

标签: react-native


【解决方案1】:

你能尝试这样的事情吗,使用状态?

export default class App extends Component<Props> {
  constructor(props) {
    super(props);
    this.state = { text: 'Text' };
  }
  render() {
    return (
      <View>
        <TextInput
          onChangeText={(text) => {
            this.setState({ text: text.toUpperCase() });
          }}
          value={this.state.text}
        />
      </View>
    );
  }
}

【讨论】:

  • 同样的结果。我相信这是 TextInput 本身内部的一个问题;与 setState 与 forceUpdate 无关。
  • 我在iOS模拟器上测试过,你用的是安卓还是iOS?
  • Android,谢谢...我确实在描述的第一句话中提到了它,但我也刚刚将它添加到标题中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-23
  • 2018-08-01
  • 2017-08-07
  • 1970-01-01
  • 1970-01-01
  • 2021-05-27
  • 2018-11-23
相关资源
最近更新 更多