在class 类中,构造器里面有一个实例变量state ,这个也是class 组件和function组件之间的区别。class 组件有自己的私有的数据
export default class BindEvent extends React.Component{
constructor(){
super()
this.state={
msg:"你好啊",
name:"wdg",
age:18
}
}
render(){
return <div>
<p>BindEvent 组件</p>
<hr />
<button onClick={()=>{this.show('wdg')}}>按钮</button>
</div>
}
btnClickFunc(){
console.log("22222222222");
}
show(name){
console.log(name)
}
}
那么我们应该如何修改state这个实例属性的值,比如上面的代码中,在state 中有若干个属性:
this.state={
msg:"你好啊",
name:"wdg",
age:18
}
现在我希望实现在我点击按钮的时候,可以修改name 的值:
我们可以使用this.setState({}) 这个实例方法,比如:
export default class BindEvent extends React.Component{
constructor(){
super()
this.state={
msg:"你好啊",
name:"wdg",
age:18
}
}
render(){
return <div>
<p>BindEvent 组件</p>
<hr />
<button onClick={()=>{this.show('Hello world')}}>按钮</button>
<p>{this.state.msg}</p>
</div>
}
btnClickFunc(){
console.log("22222222222");
}
show(msg){
this.setState({
msg:msg
})
}
}
?从上面的例子我们可以看到的是当我点击按钮的时候,会调用show 这个方法,在show方法中我们接手一个参数,这个参数值赋值给this.state.msg 我们是通过this.setSate 这个方法完成赋值的
果不其然,在我点击按钮之后,this.state.msg 被重新赋值为了 “Hello World”
注意点
1.在上面show方法中,我们调用this.setSate 仅仅是对msg 赋值,并没有涉及到其他的属性,那么一开始初始化的name,age这些属性还有吗,会变化吗
答案是:其他的属性还会存在,并且不变
2.setState 这个方法的执行是异步的,如果大家在调用了this.setState之后,想要拿到最新的state 的值,需要调用 this.setState({},function(){
})
show(msg){
this.setState({
msg:msg
},function(){
console.log(this.state.msg);
})
}
上面我们是使用this.setState 方法 对实例属性this.state 进行了修改,演示了如何使用setState这个方法,并且提出了两个需要注意点
希望对你有所帮助!
?
|