这一章讲state
,state
是MVVM
的核心,也算是React
的核心思想......都很核心啊。html
在上一章节的栗子中,咱们取出一个栗子稍做修改:react
class App extends React.Component { constructor() { super() } render() { return <p>{this.props.date}</p> } } let date=Date() ReactDom.render( <App date={date}></App>, document.getElementById('app') )
查看浏览器:git
已经知道了如何渲染数据,可是怎样更新数据呢?好比我但愿栗子中的date
根据时间变化,咱们能够以下作:github
setInterval(() => { date = Date() ReactDom.render( <App date={date}></App>, document.getElementById('app') ) }, 1000)
可是React
提供了一个更优雅的方式,那就是state
。浏览器
state
看栗子:babel
class App extends React.Component { constructor() { super() this.state = { date: Date() } setInterval(() => { this.setState({ date: Date() }) }, 1000) } render() { return <p>{this.state.date}</p> } } ReactDom.render( <App></App>, document.getElementById('app') )
咱们声明了一个state
为{date:Date()}
,而后绑定到视图上,这样视图就显示了state.date
了,这是毋庸置疑的,咱们一直都是这么作。可是接着咱们又搞了一个定时器,每秒执行一直setState
函数,将date
修改成最新的时间。就完成了视图的更新。app
setState
查看setState
文档:异步
React.Component.setState(updater[,callback]) - updater: 更新的数据 - callback: 可选,更新以后的回调
该函数是由React.Component
提供的,而咱们在声明该组件的时候继承了Component
,因此也就有了这个方面。
参数一是要更新的数据,咱们只须要传输咱们要更新的数据便可,对于不须要更新的数据,则不须要理睬。
参数二是可选的,接受一个回调函数,由于该方法是异步的,若是须要再数据更新完成以后再执行某些操做,能够在这里完成函数
咱们能够这么理解这个函数,咱们是这么调用的:this
this.setState({ date: Date() })
咱们假想它在执行的时候是这么执行的
this.state.date=Date() this.render()
还能够假想他的实现是这么实现的:
class Component{ ... setState(updator, callback){ this.state={...this.state, ...updator} this.callback?callback():null } ... }
固然无论是setState
的执行流程,仍是完整声明,都不是这样的,可是如今咱们都没必要深刻,只是为了简单而这么理解而已。