javascript - NextJS 动态路由,重新渲染特定子组件
问题描述
我有 index.js 页面,位于
页面/帖子/index.js
我可以使用链接呈现此页面:
<Link href={`/posts`} />
这是我的 index.js 页面:
function mainComponent({props}) {
<>
<MainComponent>
<ChildComponent1/>
<ChildComponent2 props={propsValue}/>
<MainComponent/>
</>
}
现在,通过 NextJs 的动态路由,我想使用查询参数并调用 api 来获取 propsValue
<ChildComponent2 props={propsValue}>
我使用动态路由,这个链接:
<Link href={/posts/${dynamic-pageId}} />
我可以使用从 API 获得的值 propsValue重新渲染ChildComponent2吗?
注意:我没有物理文件作为/pages/posts/${dynamic-pageId},我想使用那个/pages/posts/index.js,因为我也必须在这个hirerachy中渲染:
<>
<MainComponent>
<ChildComponent1/>
<ChildComponent2 props={propsValue}/>
<MainComponent/>
NextJs 有可能吗?
解决方案
当 props 参数更改时,组件会使用更改后的 props 进行渲染。
现在,由于 MainComponent 正在使用children
,我们无法阻止它在没有昂贵计算的情况下重新渲染,这无论如何都是开销。
但是,我们可以ChildComponent1
通过将其实现为 PureComponent 来防止重新渲染
class ChildComponent1 extends React.PureComponent {}
如果您的 ChildComponent1 是一个功能组件,您可以使用 React.memo 来防止在组件没有任何更改的情况下重新渲染
const ChildComponent1 = React.memo((props) => {
// logic here
})
推荐阅读
- python - 在 Python 中检查数据框列的最高值
- javascript - Three.js:难以投射基本阴影
- javascript - Highcharts 延迟构建工具提示
- python - 使用多处理时函数返回奇怪的输出
- javascript - 为什么时刻 js 给出不同的毫秒数?
- node.js - 为什么我的 lambda 仅在我用一些消息进行回调时才起作用?
- php - PROD 部署后 PHP 删除 Phing
- angular - 如何在角度 4 中为自定义排序管道编写单元测试用例?
- azure-functions - 天蓝色函数输入绑定到天蓝色事件中心时 EventData 数组的大小
- ios - AVFoundation 能否使用 iPhone XR 后置摄像头捕捉深度?