React文档声称,如果您将State Hook更新为与当前状态相同的值,则React将放弃渲染子元素或触发效果。
然而,在该示例中似乎并非如此:
function Child() {
useEffect(() => console.log("Re-render Child"));
return (<div>Child</div>);
}
export default function App() {
function Counter({ initialCount }) {
const [state, setState] = useState({value: initialCount });
useEffect(() => console.log("Re-render"));
return (
<>
Count: {state.value}
<br />
<br />
<button onClick={() => {
state.value += 1;
setState(state);
}}>+1</button>
<Child></Child>
</>
);
}
return (
<div>
<Counter initialCount={1} />
</div>
);
}
点击按钮只会更改内部属性
value
,但对象仍然相同,那么为什么React会触发重新渲染(包括子元素的重新渲染和触发console.log
效果)?这里有一个沙盒来测试: https://codesandbox.io/embed/react-hooks-counter-example-wrr2p
useEffect(() => console.log("重新渲染"), []);
。 - Praveen Kumar Purushothaman[]
参数。 - Flavien