React Native组件如何避免递归状态更新?

时间:2017-10-01 16:05:15

标签: react-native

考虑React Native的TextInput组件。它有一个名为value的道具。我将值设置为this.state.text

它还有一个道具onChangeText,我设置为(text) => {this.setState({text: text})

设置状态将导致视图重新渲染,从而触发组件上的setValue

这不会导致任何类型的递归或库存组件的不良行为。但是,在构建我自己的文本输入组件时,我发现在statevalue中使用onChangeText会导致本机输入事件重新呈现视图并调用{{ 1}}。

即键盘上的用户类型,本机模块发出setValue事件,JavaScript组件接收事件和更新状态,状态更改导致重新呈现,在本机组件上重新呈现调用setValue,以及本机组件交换掉带有从初始事件接收的值的文本(相同的值)。

问题是,当您在iOS或Android本机文本组件上设置文本时,它会重置光标。所以我尝试输入一个条件onChangeText,这在你输入慢的时候起作用,但是当你输入很快的时候,事情会变得混乱,你无法预测事件的顺序。

我查看了React Native作者如何在他们自己的文本组件中处理这个问题,他们似乎正在使用某种计数器(herehere)来同步事件,但我无法&# 39;跟上整个地方的逻辑。

目前,我的解决方案是不在渲染功能中使用if(newText != currentText) {setText(newText)},但是我的组件依赖于state未被意外调用才能正常运行,而这只是一场灾难等待发生。

有关如何更好地设计此类组件或RN组件如何解决此问题的任何见解?

0 个答案:

没有答案