redux刷新浏览器保存的值会发生改变吗?

Action.jsx

export const increase = n => {
    return {
        type: INCREASE,
        amount: n
    }
}

export const decrease = n => {
    return {
        type: DECREASE,
        amount: n
    }
}

Reducer.jsx

// 初始化state数据
const initialState = {
    number: 1
};

const update = (state = initialState, action) => {
    switch(action.type) {
        case INCREASE:
            return Object.assign({}, state, { number: state.number + action.amount});
        case DECREASE:
            return Object.assign({}, state, { number: state.number - action.amount});
        default:
            return state;
    }
}

A组件中:
connect方法:

const Main = connect(state => { 
    let { Count } = state;
    return {
        count: Count.number
    }
}, action['Update'])(Task); // 连接redux

定义增加函数,改变number

increase = () => {
    this.props.increase(1);
}

B组件中:

const Main = connect(state => { 
    let { Count } = state;
    return {
        count: Count.number
    }
}, action['Update'])(Ipieces); // 连接redux

初次进入组件,获取到number是改变之后的,但浏览器一刷新,number就变成初始值了。
急求帮忙!!!!!!

阅读 12k
3 个回答

不用疑惑,你是刷新浏览器,相当于重新开启应用,必定会从最初的状态重新开始!
要想保存值要么向后台发请求,做出真实的改变,要么将值本地存储,从本地存储去取值。
单说刷新浏览器,肯定是回复到最初状态,相当于什么也没做

用缓存将数据存起来,然后componentDidMount判断props上的数据长度是否是0来确定redux是否被清空或者刚初始化。
若为0,则获取缓存数据,从新dispatch一次set action即可

componentDidMount() {
      //判断是否页面有被人为刷新,将导致redux stroe清空,需要从缓存中恢复store
      let data = JSON.parse(localStorage.getItem('projectList'))
    //我这里用size===0 是因为我的redux数据都用了immutable data
      if(this.props.projectList.size === 0 && data) {
          this.props.setProjectList(data)
      }
  }

使用redux数据持久化 这个redux-persist 地址:https://github.com/rt2zz/redu... .
亲测可用 这个也是把redux数据保存到本地localstorage 只是redux-persist帮你封装好了,不用自己一个一个在存储本地取数据,直接redux中取

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏