javascript - 如何防止使用 redux 重新渲染组件
问题描述
如何防止组件重新渲染,例如,当我使用 redux 调度和备忘录有一个分层的对象数组(对象数组)时,我喜欢这个组件列表列表,例如
Elements =[ // an array in store.state variable
{name='a',
subEelemets:[
{name:'a-a',
components:[
{
name:'a-a-1',
component:'TextFiled',
value:'default value...'
},
]
},
]
},
]
我使用 redux 使用 dispatch 更新 Elements 数组中的组件值,但是由于多次重新渲染,性能下降,我尝试使用 memo 来防止重新渲染,但它也更新了整个 Elements 数组,因为我使用了 useSelector,
const ImportedComponent = memo((props) => {
const LoadableComponent = loadable(() =>
import("../lib" + props.compName))
);
return (
<LoadableComponent
{...props}
id={props.id}
/>)},(a,b)=>a.id===b.id?true:false)
这里是我如何修改我的组件的代码
const selectTodoIds = state => state.components.map((todo,index) => todo)
const updateComp = () => {
const Components = useSelector(selectCompsIds, shallowEqual)
const renderedListItems = Components.map((CompId) =>
<ImportedComponent key={CompId} elementID={CompId} />
)
return <ul className="todo-list">{renderedListItems}</ul>
}
当我使用教程https://redux.js.org/tutorials/fundamentals/part-5-ui-react中介绍的平面数组 但不适用于分层数组时,它可以工作,因为我应该使用“名称”来定义我正在更新哪个子元素,有什么策略可以解决这个问题吗?ps:代码只是为了澄清,
解决方案
而不是memo
你可以尝试useMemo
:
const ImportedComponent = (props) => {
const LoadableComponent = useMemo(() => {
return loadable(() => import("../lib" + props.compName));
},[props.compName]);
...
memo
仅当使用相同的道具进行大量重新渲染时才有帮助,而您似乎没有。
不过,这完全是在黑暗中拍摄的。你能发布一个stackblitz的链接吗?很高兴在上下文中看到更多代码。
推荐阅读
- excel - Excel添加在启动时不加载
- vba - 如何在 VBA x64 中使用 CallWindowProc?
- php - 将信息从列中提取到 for 循环中
- python - Python 成员运算符“在”TensorFlow 数据集中
- javascript - 使用 Post Request 在新窗口中调用 URL
- python - 处理
在 Python 中 - python - 过滤并列出特定文件名
- javascript - discord.js 机器人在设置存在时出错
- python - 尝试使用 Tweepy 检索 Twitter 地理位置时出错
- python - plotly的layout.axis对象的overlaying参数是什么意思?