【发布时间】:2021-11-07 09:11:26
【问题描述】:
我正在研究 React 挂钩并在代码中插入一些控制台日志以更好地理解渲染流程。然后我开始模拟发送相同值的 setState 效果,看看 React 是否会再次渲染它。
import { useState } from "react";
function ManComponent() {
/* States */
const [shirt, setShirt] = useState("Blue Shirt");
console.log("Rendering man with "+shirt);
/* Actions */
const changeShirt = (newShirt) => {
console.log("[Man] Changing shirt from "+shirt+" to "+newShirt);
setShirt(newShirt);
};
return (
<div>
<p>The man is using: {shirt}</p>
<div>
<button onClick={() => changeShirt("Red Shirt")}>Change to red shirt</button>
<button onClick={() => changeShirt("Blue Shirt")}>Change to blue shirt</button>
</div>
</div>
);
}
export default function App() {
console.log("Rendering app");
return (
<ManComponent />
);
}
如果我单击“更改为红色衬衫”三次,我会收到两条日志,说明组件正在渲染。它应该只有一个,因为我只更改了一次值,对吧?
我的问题是理解为什么如果状态只改变一次,组件会渲染两次。
P.S:我尝试删除严格模式,但没有效果。顺便说一句,我使用的是 React 17 版本。
【问题讨论】:
-
你应该使用一个 useEffect hook 将衬衫状态作为依赖项,这样它只会记录一次,因为它会忽略除对该状态所做的更改之外的所有其他更改。
标签: javascript reactjs console use-state