我试图理解 React.memo 但有点困惑。认为用例通过记忆组件来防止重新渲染?我有一个记忆的孩子,每次都在重新渲染。
- 应用程序
----首页【点击按钮更新状态】
------child [memoized 防止重新渲染但每次都重新渲染]
在我看来,流程应该是这样的:
- 用户点击按钮
- Home 更新本地状态,增加数字 +1
- 这会触发组件及其子组件的重新渲染
- 返回 memoized 组件,旧的控制台日志要么出现,要么什么都不出现,因为该组件的 args 没有改变。
实际发生的事情:
- 用户点击按钮
- Home 更新本地状态,增加数字 +1
- 这会触发组件及其子组件的重新渲染
- 返回被记忆的组件,重新注销。
const MemoizedChild = React.memo(ShoppingBasket);
function Home() {
const [ myNum, updateMyNum ] = useState(0);
return (
<div className="home__container">
I am the home page
<p>myNum {myNum}</p>
<button onClick={() => updateMyNum(myNum + 1)}>Add Number</button>
<MemoizedChild items={[1, 2, 3, 4]} total={900} />
</div>
);
}
日志每次都出现新的/新鲜的,孩子每次都重新渲染......
function ShoppingBasket({ total, items }) {
console.log("Re Rendered Shopping Basket" + Date.now());
return (
<div className="basket__container">
<h4 className="basket__heading">Shopping Basket</h4>
<p className="basket__info">Total: ${total}</p>
<p className="basket__info">No. of Items: {items.length}</p>
</div>
)
}
我误解了什么吗?