React中的state

组件局部状态 state

是组件内部维护的一组用于反映组件UI变化的状态集合。

class Welcome extends React.Component{
    constructor(props){
        super(props);
        this.state={}
    }
}

state特点

  1. 不可直接修改state
    需要调用this.setState()方法进行修改
  2. state的更新是异步的
  3. state的更新是一个浅合并的过程
    只需要传入需要修改的数据即可完成修改,state中未被修改的数据不会改变

  • state 和 props 主要的区别在于 props 是不可变的,而 state 可以根据与用户交互来改变。容器组件需要定义 state 来更新和修改数据。 而子组件只能通过 props 来传递数据。

使用this.setState()修改时状态类型
React官方建议把State当作是不可变对象,一方面是如果直接修改this.state,组件并不会重新render;另一方面State中包含的所有状态都应该是不可变对象。当State中的某个状态发生变化,我们应该重新创建这个状态对象,而不是直接修改原来的状态。那么,当状态发生变化时,如何创建新的状态呢?根据状态的类型,可以分成三种情况:
  1. 状态的类型是不可变类型(数组,字符串,布尔值,null,undefined)
    直接赋新值
  2. 状态类型是数组
    通过concat方法或者ES6数组扩展方法
//ES6数组解构赋值
arr: [...this.state.arr, 3]
//concat方法
arr: this.state.arr.concat([3])

注意不要使用push、pop、shift、unshift、splice等方法修改数组类型的状态,因为这些方法都是在原数组的基础上修改,而concat、slice、filter会返回一个新的数组。

  1. 状态类型是普通对象
    通过Object.assign()方法或者对象扩展语法
obj: Object.assign({}, this.state.obj, {name:'tom'})
obj:{...this.state.obj,name:'tom'}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

King_960725

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值