Redux

react-redux更新数据的实现思路:                                                        

1.先创建仓库,store文件下建立index以及redux,index相当于数据仓库,用于存储数据,而redux相当于仓库的管理者,它会拿到最新的值返回到仓库。

2.在react组件中可以通过

this.state=store.getState();

拿到仓库中的数据进行使用,然后绑定一个方法,方法里其实是一个action,是一个对象,里面的type将告诉redux是否进行数据更新以及怎样进行更新,value则是组件内拿到的最新的值。在方法内可以通过store的dispatch方法将action这个对象转发给redux仓库管理者,redux拿到action后会根据action的内容进行数据更新。

changeInputValue(e){
    const action ={
        type:'change_input_value',
        value:e.target.value
    }
store.dispatch(action)
}

3.redux的内部会接收之前的值以及action,在内部对各种type进行判断后可以知道要更新哪部分的值以及改如何更新,记住:Reducer里只能接收state,不能改变state。所以这里redux会将最新的数据返回给store仓库进行存储。

export default (state = defaultState,action)=>{
    if(action.type === 'changeInput'){
       // 深度拷贝state 因为此时我们只需要更新整个数据上的某一部分
       // 我们将数据进行拷贝后挂载新更新的部分进行返还即可
        let newState = JSON.parse(JSON.stringify(state)) 
        newState.inputValue = action.value
        return newState
    }
    return state
}

4.页面此时还未更新,我们在组件的construtor构造函数订阅redux的状态,以便于每次redux将新数据更新返回给store时组件能即使得到。

constructor(props){
    super(props)
    this.state=store.getState();
    this.changeInputValue= this.changeInputValue.bind(this)
    //----------关键代码-----------start
    this.storeChange = this.storeChange.bind(this)  //转变this指向
    store.subscribe(this.storeChange) //订阅Redux的状态
    //----------关键代码-----------end
}

此时组件订阅到redux状态,那这个状态是什么呢,我们将其声明在下面。其实就是redux状态发生了改变后组件将会得到通知并将这个状态更新到组件内部。

 storeChange(){
     this.setState(store.getState())
 }

注意点:

1.单一数据源

所有的state都放在一个状态管理器中进行管理。

2.state是只读的

唯一改变state的办法就是action,action是一个描述已发生事件的普通对象。

3.使用纯函数来进行修改

为了描述action如何改变state tree,需要去编写reducers,reducers只是一些纯函数,它接受先前的state和action,返回新的state

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值