【发布时间】:2017-10-13 06:43:00
【问题描述】:
我正在学习 React,并且正在开发一个简单的小应用程序。该应用程序包含一行,其中包含选项卡和下拉菜单。从该下拉列表中,您可以打开用于添加/删除/编辑所述选项卡的模式。
我注意到所有模式都会在应用程序启动时调用它们的渲染方法,并且每次我点击任何选项卡时,甚至是当前选择的选项卡。我对 React 真的很陌生,所以我很困惑这是否应该发生。该应用程序似乎按预期工作。
以下是代码的超级简化版本,仅包含必要的部分:
app.js
class App extends React.Component {
// ...
// state is { modals: { addTab: false, editTab: false, removeTab: false } }
closeModal = (modalState) => {
const obj = this.state.modals;
obj[modalState] = false;
this.setState(obj);
}
render() {
<div className="App container-fluid">
// ...
<AddTabModal showModal={this.state.modals.addTab} closeModal={this.closeModal} ... />
// ...
</div>
}
}
AddTabModal.js
class AddTabModal extends React.Component {
// ...
render() {
// This gets triggered every time I click any tab or the dropdown menu.
// Even if the modal is not visible.
console.log('Render add tab modal');
return (
<Modal show={this.props.showModal} ... >
// ...
<Modal.Footer>
<Button onClick={() => { this.props.closeModal('addTab'); }}>Close</Button>
</Modal.Footer>
</Modal>
);
}
}
我还读到在 JSX 中使用箭头函数是一种不好的模式,但是如果我将按钮更改为:
<Button onClick={this.props.closeModal('addTab')}>Close</Button>
它应该仍然只在我单击按钮时运行,对吗?但是该应用程序从一开始就完全锁定,并且出现“超出最大更新深度”错误。我相信这与上述问题有关,因为我在应用程序中没有任何 componentWillUpdate/componentDidUpdate 方法。
【问题讨论】:
-
能否在您的代码中包含
Modal导入?
标签: javascript reactjs react-bootstrap