From 193bc52410e993f154c0d5ba8aa4af298e2cf244 Mon Sep 17 00:00:00 2001 From: grantedFine Date: Thu, 13 Feb 2020 17:26:08 +0800 Subject: [PATCH] fix(Menu): add setState condition in updateMiniStore method to avoid infinite call in componentDidUpdate --- src/Menu.tsx | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/Menu.tsx b/src/Menu.tsx index acda6be4..cd03c770 100644 --- a/src/Menu.tsx +++ b/src/Menu.tsx @@ -108,8 +108,8 @@ class Menu extends React.Component { this.updateMiniStore(); } - componentDidUpdate() { - this.updateMiniStore(); + componentDidUpdate(prevProps: MenuProps) { + this.updateMiniStore(prevProps); } onSelect = (selectInfo: SelectInfo) => { @@ -215,16 +215,20 @@ class Menu extends React.Component { this.innerMenu = node; }; - updateMiniStore() { + updateMiniStore(prevProps?: MenuProps) { if ('selectedKeys' in this.props) { - this.store.setState({ - selectedKeys: this.props.selectedKeys || [], - }); + if (!prevProps || this.props.selectedKeys !== prevProps.selectedKeys) { + this.store.setState({ + selectedKeys: this.props.selectedKeys || [], + }); + } } - if ('openKeys' in this.props) { - this.store.setState({ - openKeys: this.props.openKeys || [], - }); + if ('openKeys' in this.props && this.props.openKeys.length) { + if (!prevProps || this.props.selectedKeys !== prevProps.openKeys) { + this.store.setState({ + openKeys: this.props.openKeys || [], + }); + } } }