【发布时间】:2022-01-09 17:03:05
【问题描述】:
我目前正在学习 React,并试图了解组件如何重新渲染。我有这个渲染三个项目的父组件。每个项目只呈现一个<li>
function App() {
console.log("Parent Rerendered");
return (
<div>
<ul>
<Item1 />
<Item2 />
<Item3 />
</ul>
</div>
);
}
Item2 有点不同,因为它还呈现了一个“x”,当它被点击时会取消呈现组件:
function Item2() {
const [visible, setVisible] = useState(true);
const makeInvisible = () => {
setVisible(false);
};
console.log("Item 2 Rerendered");
return visible ? (
<div>
<li>
Second Item <span onClick={makeInvisible}>X</span>
</li>
</div>
) : null;
}
当我在浏览器中测试并单击“x”时,我可以从控制台看到 Item2 被重新渲染。但是,包括父组件在内的其他组件都不会重新渲染。但是父组件确实发生了变化,那么如何在不重新渲染的情况下发生这种情况。
如果这有点令人困惑,这里是初始状态、我的期望和现实的图示。我对 React 如何重新渲染组件有什么误解?
【问题讨论】:
标签: javascript reactjs react-hooks