在一個簡單的reactJS類中,this.setState()並沒有真正設置狀態。我知道它是異步調用的,但即使組件再次渲染時,狀態也不會發生變化。所以this.state.showModal
是false
組件安裝(如預期),那麼它是true
「永遠」。爲什麼ReactJS在setTimeout中調用setState時會設置狀態?
這裏有一個簡單的例子:
class MyComponent extends Component {
constructor (props) {
super(props)
this.state = {
showModal: false
}
this.showModal = this.showModal.bind(this)
this.hideModal = this.hideModal.bind(this)
}
showModal() {
this.setState({ showModal: true })
}
hideModal() {
this.setState({ showModal: false })
}
render() {
console.log(this.state.showModal) // Outputs true even after the hideModal() call
return (
<Components>
<div onClick={this.showModal}>
{
this.state.showModal === true
? <Modal
handles={handles}
close={this.hideModal}
/>
: '+'
}
</div>
</Components>
)
}
}
這裏的模態分量:
setTimeout(() => this.setState({ showModal: false }), 0)
class Modal extends Component {
render() {
return (
<div className='configurator-modal'>
<button className='close' onClick={this.props.close}> x </button>
Modal
</div>
)
}
}
但是,當我有這樣的超時更換hideModal
功能
狀態發生變化並呈現如預期的那樣。
我只是想知道爲什麼ReactJS可能可以在內部重置狀態或防止狀態發生變異?
編輯:調用hideModal和添加的ShowModal
您需要顯示如何調用'hidemodal'? – Panther
你能告訴我們你如何調用'hideModal'方法嗎? – vs1682
我編輯了我的帖子,對不起,我試圖簡化代碼太多。 – 3Dos