我试图实施,让我们说Twitter。我正在做类似
的事情initialState = {
tweets: {id => tweet}
}
然后,用户转到他的时间轴,现在动作fetchTweets抓取他的所有推文。然而,他可以发一条推文,推特T.但如果我不手动将发布的T插入state.tweets,他将不会在他的时间轴中看到这条推文。
所以问题是,当用户在他的页面上执行某些操作时,刷新数据是一个好点吗?在这种情况下,redux如何避免数据过时?
谢谢!
答案 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将为您处理差异,而不是重新渲染整个页面。这取决于你设计得好,以便用户注意新推文的发布时间和地点。
希望有所帮助!