【发布时间】:2020-05-25 20:37:01
【问题描述】:
我有一个无状态功能组件<Sidebar/>,它只是在一个 div 中返回其子级。此组件由 <App/> 呈现,它维护自己的状态,并将该状态的元素“越过”侧边栏传递给它的一个子项。
const Sidebar = React.memo(({children}) => {
return <div className='sidebar'>{children}</div>
})
const App = (props) => {
const [counter, setCounter] = useState(0);
setInterval(() => {setCounter(counter => counter+1}), 1000)
return (
<Sidebar>
<ChildOne counter={counter}/>
</Sidebar>
)
}
尽管在<Sidebar> 上使用了 React.memo,但它会在每次状态更改时重新渲染。我做了一些阅读和实验,问题似乎是当<ChildOne/>更新它的状态时,React实际上是在创建一个全新的对象,所以即使是浅层的比较也会显示孩子们在变化,因此侧边栏会重新渲染.
如何让边栏停止重新渲染?
【问题讨论】:
-
您是否尝试过使用
memo,您可以向我们展示该代码吗? -
我已经编辑了代码以使其更加明确。
-
如果不查看您的实现,很难说出哪里出了问题。我尝试使用
ChildOne中的内部状态重新创建问题,并记住Sidebar。这是实现codesandbox。看看控制台,在我的情况下Sidebar从未呈现。您可以编辑沙箱以使用您的实施重新创建问题。 -
我意识到我把场景过于简单化了。我已编辑 - 希望对您有所帮助。
标签: reactjs