import React, { Component } from 'react'
export default class index extends Component {
constructor(props) {
super(props)
this.state = {
obj: {page: 1,foo: 'bar'}
}
}
/**
* output:
* 第一次 click {foo: "bar", page: 1}
* 第二次 click {page: 2}
* @memberof index
*/
xxx = () => {
this.setState({
obj: {
page: this.state.obj.page + 1
}
})
console.log(this.state.obj);
}
render() {
return (
<div>
<h1>Test</h1>
<button onClick={() => this.xxx()}>click me</button>
</div>
)
}
}
上例期望得到
/**
* output:
* 第一次 click {page: 2}
* 第二次 click {page: 3}
* @memberof index
*/
setState
可以接受两个参数,第二个参数可选.第一个参数可以是一个函数或者一个对象.
如果直接传对象的就是执行对象跟
state
的浅合并.如果传入一个函数,则会把函数的返回对象跟
state
进行浅合并,这个函数会传入两个参数state
和props
,返回一个对象第二个参数,是
state
更新完毕之后,调用的回调函数,如果有需要在state
更新之后的操作,可以放在这里,不过官方更建议在componentDidUpdate
里面处理更新之后的操作.官方文档