2016-10-19 88 views
0

我们在应用程序中使用作出反应,终极版。问题是我们想要根据浏览器按钮的用户导航来撤消和重做Redux状态。假设用户在页面A中,并且用户浏览其他页面的几个,然后他导航到页面A,例如。现在,如果用户在浏览器中按下后退按钮时,他会回到页面A,但在这里,我们希望有状态的前一个实例的应用程序必须在用户页面A.处理浏览器历史记录与之反应,终极版

有没有办法解决这个集中式方法问题不需要手动处理状态操作。

回答

1

你所想要实现作出反应,终极版的默认行为。如果你是不是要派一些行动,操纵特定组件的状态,路由变化时,就应该坚持其老态,没有任何附加功能。

所以我的猜测是,当新的路线加载组件,您都派遣了一些行动。如何才能用这个来处理(例如,不获取从静止API一旦它的存在,这最终导致操纵组件资源)是在这里:https://github.com/reactjs/redux/blob/master/examples/async/src/actions/index.js#L35

const shouldFetchPosts = (state, reddit) => { 
    const posts = state.postsByReddit[reddit] 
    if (!posts) { 
    return true 
    } 
    if (posts.isFetching) { 
    return false 
    } 
    return posts.didInvalidate 
} 

export const fetchPostsIfNeeded = reddit => (dispatch, getState) => { 
    if (shouldFetchPosts(getState(), reddit)) { 
    return dispatch(fetchPosts(reddit)) 
    } 
} 

那么这是什么做的是,它不会通过一旦路由改变(如果它已经存在),一个新的数据导入到组件中,所以旧的数据/状态停留在那里。您可以更多地抽象这个函数,使其可以轻松地重用于所有其他组件。