在数组的 setState 上重新加载
React reload on setState of an array
我刚开始使用 React 和 next。我想知道为什么当我像这样 [test, setTest] = useState("test") 更新 useState 时,该值会在网页上重新加载,但在下面的情况下不会。任何人都可以解释为什么以及如何解决它吗?
const [testing, setTest] = useState({
name:"test"
})
function test(){
setTest(old =>{
old.name = "new name"
return old;
})
}
return (
<ThemeProvider theme={theme>
<button onClick={test} />
<GlobalStyles/>
<h1>{testing.name}</h1>
</ThemeProvider>
)
尝试
function test(){
setTest({...testing,name : "new name"})
}
react 的核心原则之一是状态是不可变的。设置状态后,React 将在旧状态和新状态之间执行 ===
。如果结果为真,则 React 认为没有任何变化并跳过渲染。因为你正在改变状态,它会传递一个 ===
,并且反应不能告诉你改变了对象。
因此,您需要创建一个新对象,而不是改变状态对象:
setTest(old => {
return {
...old,
name: "new name"
}
})
我刚开始使用 React 和 next。我想知道为什么当我像这样 [test, setTest] = useState("test") 更新 useState 时,该值会在网页上重新加载,但在下面的情况下不会。任何人都可以解释为什么以及如何解决它吗?
const [testing, setTest] = useState({
name:"test"
})
function test(){
setTest(old =>{
old.name = "new name"
return old;
})
}
return (
<ThemeProvider theme={theme>
<button onClick={test} />
<GlobalStyles/>
<h1>{testing.name}</h1>
</ThemeProvider>
)
尝试
function test(){
setTest({...testing,name : "new name"})
}
react 的核心原则之一是状态是不可变的。设置状态后,React 将在旧状态和新状态之间执行 ===
。如果结果为真,则 React 认为没有任何变化并跳过渲染。因为你正在改变状态,它会传递一个 ===
,并且反应不能告诉你改变了对象。
因此,您需要创建一个新对象,而不是改变状态对象:
setTest(old => {
return {
...old,
name: "new name"
}
})