【问题标题】:onChangeText of TextInput is updating state but retrieving the old valueTextInput 的 onChangeText 正在更新状态,但正在检索旧值
【发布时间】:2021-09-23 07:59:31
【问题描述】:

我有一个状态:

const [userName, setUserName] = useState('');

接下来,我将TextInput 设为:

                        <TextInput style={styles.value}
                            keyboardType={'default'}
                            placeholder={'Your Name'}
                            value={userName}
                            editable={true}
                            onChangeText={(value) => {
                                setUserName(value)
                            }} />

按钮的onPress 事件我正在调用这个函数:

function saveButtonPressed() {
    alert("The Value of Name is " +  userName);
}

问题是我可以在文本字段中看到 vvalue 正在更新,但在 alert 中我仍然看到 '',如果我再次保存 coe,它会显示更新后的值。

【问题讨论】:

  • alert 可能有问题,使用 console.log 签入控制台即可
  • @DeveloperAmit 我做了,还是一样,打印的是旧值。
  • 你在哪里调用 saveButtonPressed 函数?
  • @GuruparanGiritharan 我在导航栏中有一个按钮。我设置为:useFocusEffect( useCallback(() =&gt; { navigation.setOptions({ headerRight: () =&gt; (&lt;TouchableOpacity style={styles.navRightButton} onPress={() =&gt; { saveButtonPressed() }}&gt;&lt;Text&gt;Save&lt;/Text&gt;&lt;/TouchableOpacity&gt;),})}, [navigation]));
  • 在这种情况下,将 userName 变量作为依赖项与导航一起传递到 useFocusEffect 挂钩

标签: react-native use-state


【解决方案1】:

它们不显示当前值的原因与您的函数形成闭包有关。即使 userName 的值发生变化,它仍然是一个 const 并且由于更新它的函数在第一次重新渲染时仍然具有范围,因此更新的值不会显示。相反,当范围在闭包之外发生变化时,即在第二次重新渲染中获得更新的值时。

第一个链接对此有解决方案。 第二个链接有更多关于钩子的信息。

这些应该会详细回答您的问题。 https://stackoverflow.com/a/58877875/9745240https://stackoverflow.com/a/54069332/9745240

阅读有关closures 的内容应该会对您有所帮助。

【讨论】:

  • 那么,在我的情况下,如何使用useEffect 更新值?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-04
  • 2021-08-26
  • 2020-03-01
相关资源
最近更新 更多