我正在學習React並正在研究一個簡單的小應用程序。該應用程序包含一個包含選項卡和下拉菜單的行。從該下拉菜單中,您可以打開添加/刪除/編輯標籤的模式。不必要的模態呈現與React和React-bootstrap應用程序
我注意到,所有的模態都會在應用程序啓動時調用它們的渲染方法,並且每次點擊任何選項卡時,即使是當前選定的選項卡。對於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'導入? – stone