2017-05-14 158 views
1

我有组件显示我的用户配置文件页面。在这个组件里面我有一个按钮。点击后,此按钮使用动作功能向我的追随者显示另一个组件。React-native中的多个相同状态的实例

与我的关注者列表中的组件里面,我可以点击每个跟随并与用户配置文件组件打开他的个人资料,并出示其跟随者的信息和他的个人资料。一切正常,直到我点击回来。然后我看到一个不属于我的追随者列表,但属于我刚刚单击的配置文件。

由于减速器被改写的状态,谁我目前看,如果我去其他用户的追随者页面,然后点击到另一个人,我看到相同的行为。我想我需要保存以前的用户的关注者列表和以前的个人档案,或者可能像复制缩减器中的以前的状态,但我不知道如何。

我将Wilddog用于我的后端,它与Firebase类似,但用于中国。我已将所有文件附加到下面链接的GIST。

看来解决方案应该是显而易见的,但我没有得到解决它的窍门。

https://gist.github.com/myfailemtions/0c4b79fef1aa5e6d67d3f828717474f5

回答

1

它看起来对我来说,有问题的代码可能如下:

class Followers extends Component { 

    componentWillMount() { 
    const {uid} = this.props.user; 
    this.props.followersFetch({uid}); 
    this.createDataSource(this.props) 
    } 

    componentWillReceiveProps(nextProps) { 
     this.createDataSource(nextProps) 
    } 

    // ..omitted 

} 

它看起来像你取当组件坐骑,却忘记在更新列表道具更新。将this.props.followersFetch(nextProps({this.props.user.uid});添加到componentWillReceiveProps可能会修复该错误。

如果你担心向服务器多次调用,你将需要实现你的减速缓存。现在你的代码片断显示你用跟随者获取覆盖了你的整个状态(?!) - 这可能不是你想要的。如果你想回滚到以前的状态,用Immutable.js这样的库来存储你的状态可能就是你想要的。

编辑

一个快速和肮脏的修改现有的动作来存储以前的状态。这样做需要重构大部分视图,因为每当您获取关注者时,它不会再删除由reducer管理的所有状态。

export default (state = INITIAL_STATE, action) => { 
    switch (action.type) { 
     case FOLLOWING_FETCH: 
      //Following lines updates state, rather than rewrites it 
      return { 
        ...state, 
        cachedFollowers: state.cachedFollowers.push(action.payload) 
       }; 
     default: 
      return state 
    } 
}; 

警告:上述代码是未测试的

相关问题