reactjs - 整个页面重新渲染,而不仅仅是包含更新属性的组件
问题描述
在下面的 React App 代码中,我设置了一个 useState 属性,该属性绑定到一个名为 Header 的函数组件。演示代码中没有显示的是我正在从另一个子组件调用 triggerTestProp 函数,该子组件位于例如 HomePage 组件中。
但是,每当我设置此属性时,不仅会重新呈现横幅,还会重新呈现包含标题的整个页面。如演示代码所示,我正在使用 React Router 进行导航。知道为什么要重新渲染整个页面,而不仅仅是按预期重新渲染标题吗?
function App() {
const [testProp, setTestProp] = useState(
"defaultVal"
);
function triggerTestProp(newTestProp: string) {
setTestProp(newTestProp);
}
return (
<div>
<Header banner={testProp}></Backdrop>
<Router>
<Switch>
<Route path="/home/">
<HomePage></HomePage>
</Route>
<Route path="/:id">
<DetailPage></DetailPage>
</Route>
<Route path="/">
<HomePage></HomePage>
</Route>
</Switch>
</Router>
</div>
);
}
export default App;
解决方案
当您在 App.js 中设置状态时setTestProp(newTestProp);
,它会重新呈现,这反过来会导致其所有子组件重新呈现。
为了防止子组件在其 props 或 state 未更改时重新渲染,请使用React.memo()
. 将子组件导出为export default React.memo(HOmePage)
推荐阅读
- visual-studio-code - 崩溃启动失败 Visual Studio 代码
- origen-sdk - 使用“-d”运行时启用详细注释
- visual-studio - 我是 docker 的新手,我正在创建一个用于安装 Visual Studio 工具的 docker 文件,但我不想使用我的 C 盘。COPY 命令有问题
- php - 通过 post-function 从 HTML 获取输入到 php
- css - 如何在css中进行过渡
- graphql - GraphQL 游乐场未显示在 localhost:4000
- python - 如何进行 IP 摄像机连接验证
- typescript - 返回可变长度通用数组元组的函数
- segmentation-fault - 如何在不链接 libc.so 的情况下访问段寄存器?
- php - Corcel - 为已保存的帖子设置特色图片