Redux可以避免陈旧数据?

时间:2016-09-17 20:44:42

标签: reactjs redux react-redux

我试图实施,让我们说Twitter。我正在做类似

的事情
initialState = {
  tweets: {id => tweet}
}
然后,用户转到他的时间轴,现在动作fetchTweets抓取他的所有推文。然而,他可以发一条推文,推特T.但如果我不手动将发布的T插入state.tweets,他将不会在他的时间轴中看到这条推文。

所以问题是,当用户在他的页面上执行某些操作时,刷新数据是一个好点吗?在这种情况下,redux如何避免数据过时?

谢谢!

2 个答案:

答案 0 :(得分:3)

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

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

您必须自行决定何时执行此操作,您可以使用setTimeout或其他任何您想要的内容。

如果你手动将推文插入状态而不是在发帖时重新提取,那么这可能是最好的。它反应灵敏得多。

答案 1 :(得分: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将为您处理差异,而不是重新渲染整个页面。这取决于你设计得好,以便用户注意新推文的发布时间和地点。

希望有所帮助!