2016-09-17 42 views
3

我正在努力实现,让我们说推特。我正在做类似Redux避免陈旧的数据?

initialState = { 
    tweets: {id => tweet} 
} 

然后,用户转到他的时间线,现在fetchTweets动作获取他的所有推文。然而,他可以发布推文,推特T.但是如果我不手动将发布的T插入到state.tweets中,他将不会在他的时间表中看到这条推文。

因此,问题是,当用户在他的页面上执行某些操作时,刷新数据的好处是什么?在这种情况下,redux如何避免数据陈旧?

谢谢!

回答

3

Redux为您管理您的状态。它告诉任何想要了解状态变化的人,例如React-Redux。

它无法帮助您获取数据,例如推文。它也不会帮助您决定何时获取这些数据。

您必须自己决定何时执行此操作,并且您可以使用setTimeout或其他任何您感兴趣的内容。

这可能是最好的,如果你手动插入推文到状态而不是当你发布时重新提取。它的反应非常敏捷。

3

使用Redux时,这是一个范式转换,但您不希望任何函数成为您的状态。所以,该初始状态应该实际上只是null或者一个空对象(取决于接收这些道具的组件的设计)。但要更直接地回答你的问题,如果你想确保数据保持“新鲜”,你需要做到这一点。 Redux中没有魔法,这是一件好事。

但是,如果您正确设计代码,用户不应该体验类似整页刷新的问题。在高层次上,我可以设计你所描述的内容。

请求和接收微博,即写操作:

export function requestTweets() => { 
    return { 
     type: REQUEST_TWEETS 
    } 
} 
export function receiveTweets(tweets) => { 
    return { 
     type: RECEIVE_TWEETS, 
     payload: tweets 
    } 
} 

然后包装,既可地方重复使用“公共”的功能:

export const fetchTweets =() => { 
    return (dispatch, getState) => { 
     dispatch(requestTweets()) 
     //network code here is pseudocode 
     fetch('https://tweeter/api/v1/tweets') 
     .then(data => dispatch(receiveTweets(data)) 
     .catch(err => displayErrorMsg(err)) 
    } 
} 

然后在动作处理程序只是减少推文进入下一个状态。

现在使用fetchTweets,您可以在发布后或间隔期间在第一次加载时调用它。好的是React会为你处理差异,而不是重新渲染整个页面。这完全取决于你的设计,因此用户会注意到新推文的来历时间和地点。

希望有所帮助!