我有下面的示例代码:
function App() {
console.log("render");
const [val, setVal] = React.useState(0);
return (
<div className="App">
<h1>{val}</h1>
<button onClick={() => setVal(12)}>Update with same value</button>
</div>
);
}
当我点击一个按钮多次时,控制台会记录3次“render”消息。 对我来说,它应该只有2次:
第一次渲染是1
从val 0更新到12(点击按钮时)的更新为2
自此以后,由于相同的值(12)已更新为val,因此不应再重新呈现。
但为什么它会出现3次?这意味着尽管相同的值已经更新,但仍会重新呈现一次。
请知道的人解释一下,谢谢!
P / S:我已经发现只有在更改值然后将其更新为相同时才会导致额外的重新呈现。
function App() {
console.log("render");
const [val, setVal] = useState(4);
return (
<div className="App">
<h1>{val}</h1>
<button onClick={() => {
setVal(val => val + 1)
}}>Update</button>
<button onClick={() => {
setVal(val => val)
}}>Update with same value</button>
</div>
);
}
第一次点击第二个按钮时,不会重新渲染,但如果先点击第一个按钮再点击第二个按钮,则第二个按钮会导致多一次重新渲染。
当第一次单击第二个按钮时,组件不会重新呈现。但是,如果您先单击第一个按钮再单击第二个按钮,则第二个按钮将导致额外的重新呈现。
PureComponent
,而不是手动定义shouldComponentUpdate
。但是当数据嵌套深度较大时,最好使用shouldComponentUpdate
。 - Yash Joshi