React.js 小书 Lesson19 - 挂载阶段的组件生命周期(二)
React.js 小书 Lesson19 - 挂载阶段的组件生命周期(二)
转载请注明出处,保留原文链接以及作者信息 在线阅读:http://huziketang.com/books/react 这一节我们来讨论一下对于一个组件来说, 一般来说,所有关于组件自身的状态的初始化工作都会放在
我们会在 class Clock extends Component { constructor () { super() this.state = { date: new Date() } } render () { return ( <div> <h1> <p>现在的时间是</p> {this.state.date.toLocaleTimeString()} </h1> </div> ) } } 一些组件启动的动作,包括像 Ajax 数据的拉取操作、一些定时器的启动等,就可以放在 ... componentWillMount () { ajax.get('http://json-api.com/user',(userData) => { this.setState({ userData }) }) } ... 当然在我们这个例子里面是定时器的启动,我们给 class Clock extends Component { constructor () { super() this.state = { date: new Date() } } componentWillMount () { this.timer = setInterval(() => { this.setState({ date: new Date() }) },1000) } ... } 我们在 class Index extends Component { render () { return ( <div> <Clock /> </div> ) } } ReactDOM.render( <Index />,document.getElementById('root') ) 像上一节那样,我们修改这个 class Index extends Component { constructor () { super() this.state = { isShowClock: true } } handleShowOrHide () { this.setState({ isShowClock: !this.state.isShowClock }) } render () { return ( <div> {this.state.isShowClock ? <Clock /> : null } <button onClick={this.handleShowOrHide.bind(this)}> 显示或隐藏时钟 </button> </div> ) } } 现在页面上有个按钮可以显示或者隐藏时钟。你试一下显示或者隐藏时钟,虽然页面上看起来功能都正常,在控制台你会发现报错了:
这是因为,当时钟隐藏的时候,我们并没有清除定时器。时钟隐藏的时候,定时器的回调函数还在不停地尝试 多次的隐藏和显示会让 React.js 重新构造和销毁 这时候 ... componentWillUnmount () { clearInterval(this.timer) } ... 这时候就没有错误了。 总结我们一般会把组件的 说一下本节没有提到的 下一节中我们将介绍《React.js 小书 Lesson20 - 更新阶段的组件生命周期》。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |