首页 > 解决方案 > TextInput 的 onChangeText 正在更新状态,但正在检索旧值

问题描述

我有一个状态:

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

标签: react-nativeuse-state

解决方案


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

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

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

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


推荐阅读