如何解决正确更新reactjs中的状态数组
const [ enteredGoal,setEnteredGoal ] = useState("");
const [ courseGoals,setCourseGoals ] = useState([]);
const goalInputHandler = (enteredText) => {
setEnteredGoal(enteredText);
};
const addGoalHandler = () => {
let arrGoals = courseGoals;
arrGoals.push(enteredGoal);
setCourseGoals(arrGoals);
};
return (
<View style={styles.screen}>
<View style={styles.inputContainer}>
<TextInput style={styles.input} onChangeText={goalInputHandler}/>
<Button title="ADD" onPress={addGoalHandler}/>
</View>
<View>
{
courseGoals.map((goal) => {
<View key={goal} style={styles.listItem}><Text>{goal}</Text></View>
})
}
</View>
</View>
);
这个想法是列出setCourseGoals数组,但是显然在分配了新文本之后,它没有列出任何内容。直到文本更改后,列表才重新呈现。知道为什么会这样吗? “ useState”函数是异步的,它在渲染后分配值?预先感谢。
解决方法
问题来自addGoalHandler
const addGoalHandler = () => {
let arrGoals = courseGoals;
arrGoals.push(enteredGoal);
setCourseGoals(arrGoals);
};
发生了什么事,您正在使用push
方法将其推入已更改状态的courseGoals
,您可以执行的选择之一是更新为以下状态
const addGoalHandler = () => {
let arrGoals = [...courseGoals,enteredGoal];
setCourseGoals(arrGoals);
};
这个想法是,使用传播语法,您可以创建一个数组的新副本,而不是突变先前的状态,当然,可以将其缩短为单行,如下所示:
const addGoalHandler = () => setCourseGoals([...courseGoals,enteredGoal])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。