在这篇关于使用上下文 API 进行状态管理的文章中,作者以这种方式将 useMemo 应用于 useState 返回值:
function CountProvider(props) {
const [count, setCount] = React.useState(0)
const value = React.useMemo(() => [count, setCount], [count])
return <CountContext.Provider value={value} {...props} />
}
我不确定是否了解此优化的目标:
- 1/是否防止在任何道具发生变化时重新渲染,
- 2/ 或者setCount本身可以虚假改变吗?
如果是1/,是不是就相当于下面的代码?(因为:除了孩子之外,我们还想将什么道具传递给上下文提供者?如果孩子改变,重新渲染是可取的)
function CountProvider({children}) {
const [count, setCount] = React.useState(0)
return (
<CountContext.Provider value={[count, setCount]}>
{children}
</CountContext.Provider>
);
}