RN使用redux时 如果一个contrainer被push了多次 如何组织state?



  • 以我的理解 整个app应该只有单一state
    这样是不是得在state中设计类似栈的结构来满足这种需求?



  • 问题不太清楚啊,应该是只有一个store才对吧,push是指什么?导航?导航的话有导航自己的栈吧



  • redux一个store可以有很多reducer啊,那得看你要存储那些东西了,好好考虑数据结构



  • @kaenry
    比如我有一个查看附近店铺的列表页ListContrainer
    从ListContrainer可以进到店铺详情页DetailContrainer
    在DetailContrainer可以查看这个店铺附近的店 从而继续在导航栏中push进一个ListContrainer
    ...

    以ListContrainer为例
    常规的MVC设计下 ListContrainer的每一个实例都应该单独对应一个model实例

    但是在Redux下 store和全局state是唯一的 也就是说所有ListContrainer对应的state都应该是同一份
    比如现在有一个如下路由ListContrainer(1) -> detailContrainer(1) -> ListContrainer(2) .....
    我在ListContrainer(2) 中请求了网络数据,并刷新了state
    当用户返回到ListContrainer(1) 时,数据全变成了ListContrainer(2) 中的数据,这显然是不符合需求的。
    所以我想问这种情况应该如何优雅的解决?



  • @iseeicando ListContainer 可以有很多个, 而他对应的 state 在store里也可以有不同的对应, state在store里是可以 以这种形式存在的。
    store: {
    state: {
    listContainer: {
    xxxx
    },
    listContainer2: {
    aaaaa
    }
    }
    }

    也就是说是可以取名字的。



  • ListContrainer[1]
    这样比较容易处理



  • 我也遇到这个问题了,不知道哪位大神能给个解决方案。



  • @会飞的猪 兄弟,我已经解决了这个问题了
    但是我现在没空跟你讲全部方案 可以先给你个提示
    mapStateToProps有两个参数 一个是state 一个是需要connect组件的props
    比如你被push多次的页面有一个店铺id的属性 那么应该就可以用props.storeid访问到
    你在组织state的时候 应该用storeid 来标记每个页面的数据 比如:
    state.store.storeid1.name
    state.store.storeid2.name
    等等


登录后回复