TextInput 的 onChangeText 正在更新状态但检索旧值

时间:2021-07-14 10:29:33

标签: react-native use-state

我有一个状态:

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,它会显示更新后的值。

1 个答案:

答案 0 :(得分:0)

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

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

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

阅读有关 closures 的文章应该会对您有所帮助。