ListFolders
是一个React组件。并且“ 文件夹”数据道具从 MainLayout
组件传递到此组件。
MainLayout
组件使用redux connect
并获取“ 文件夹”。
在这里,我在 ListFolders
中遇到的问题是,列出文件夹时有一些映射和计算。因此,因为第二次通话需要更多时间,所以这是一个重要的性能问题。
下面的基本示例。我正在使用redux-saga
和immutable.js
。
我收到name (ContainerDesc)
,id (IdEncrypted)
,haveChildFolders
和childFolders
。
在这里,它两次进入
if (folders !== undefined) { ...
代码块内部。
render() {
const { classes, folders } = this.props;
let reactListItems = [];
if (folders !== undefined) {
var iterator1 = folders[Symbol.iterator]();
for (let item of iterator1) {
reactListItems.push({
'name': item.get('ContainerDesc'),
'id': item.get('IdEncrypted'),
'haveChildFolders' : item.get('ChildContainers').size > 0,
'childFolders': item.get('ChildContainers')
})
}
}
return (
<List classes={{ root: classes.list, }}>
...
</List>
);
}
答案 0 :(得分:1)
对于第二次调用,文件夹数据可能没有更改并且未定义,因此在componentWillReceiveProps()中添加了另一个条件来检查文件夹数据是否已更改:
componentWillReceiveProps(nextProps){
if (folders.length !== nextProps.folders.length) {
return ...
}
}
或者您可以添加条件shouldComponentUpdate()并在条件不满足时停止组件以进行更新
shouldComponentUpdate(nextProps){
if (folders.length !== nextProps.folders.length) {
return true
}
else{
return false
}
}
答案 1 :(得分:0)
我发现两次调用ListFolders
的原因。
我在ListFolders
内使用SidebarComponent
,在Sidebar
中,我使用了Material-ui hidden
帮助程序来访问桌面和移动菜单。下面的示例代码。
<Hidden mdUp implementation="css">
...
<Drawer variant="temporary" ... /* Sidebar Drawer */
</Hidden>
<Hidden smDown implementation="css">
...
<Drawer variant="temporary" ... /* Sidebar Drawer */
</Hidden>
由于ListFolders
甚至会多次提取数据。
我认为我将使用纯CSS处理移动菜单。