【发布时间】:2020-09-30 02:48:11
【问题描述】:
我有一个功能,可以通过单击按钮在单个页面上切换窗口(组件)。
交换窗口的功能:
getProfileContent = () => {
var html = [];
if (this.state.content === "picks") {
html.push(<Picks picks={this.state.picks} deletePick={this.deletePick} />);
}
if (this.state.content === "api") {
html.push(<Admin admin="admin" />);
}
if (this.state.content === 'settings') {
html.push(<Settings />);
}
return html;
};
父组件初始加载时内容默认为“picks”,“Picks”组件第一次加载时一切正常,因为触发了下面的componentDidUpdate更新功能:
“Picks”组件更新功能:
componentDidUpdate(prevProps, prevState) {
console.log('here')
if (Object.keys(prevProps.picks).length !== Object.keys(this.props.picks).length) {
this.sortPicks();
}
}
然而,在通过 getProfileContent 交换窗口并返回 "Picks" 组件后,componentDidUpdate 函数不触发。我还尝试向 Picks 组件添加不同的“键”值,希望新的道具会触发 componentDidUpdate,但没有运气。如果条件,我有控制台日志,所以我知道无论条件如何都不会调用 componentDidUpdate。任何帮助表示赞赏,谢谢!
【问题讨论】:
-
您只检查数组的大小而不是内容。实际上考虑
console.loging 什么prevProps.picks和this.props.picks。是。它可能只是具有相同数组大小的新内容(应该重新渲染) -
componentDidUpdate 函数根本没有被调用,所以这不是条件,我做了控制台日志,一切都检查了,不过感谢您的建议
-
是的,没问题。即使我的评论不能解决您当前的问题,它仍然是一个基本错误,如果您现在不解决它,它会再次困扰您。在绝大多数情况下,比较数组大小并不是一个可靠的解决方案。
-
这很好,我已经改变了条件,并且投了赞成票。我很感激
标签: javascript reactjs web components react-props