redux中state数据变动后怎么强制刷新

我的理解可能有错误,有的话请大神指出。

state数据变动后刷新,我一般是使用Object.assign,数据嵌套的深的话用loadsh库的merge方法。但用到现在我感觉,只有state中的某项数据跟render有关系,或者说这条数据的变动会导致render不同的结果,那么这条数据变动了,会重新渲染。
现在我又一项数据是跟render没关系的,它变动之后我想强制刷新,这个该怎么做?
(我知道react有forceUpdate方法,但不知道这里有没有用,该怎么用)

举个例子:
有这样一个action(使用了thunk)

fetchReaderInitialState = (name, chapterId,chapterTitle, initial) => {
    return (dispatch) => {
        dispatch(setReaderInitialState(name, chapterId,chapterTitle));

        return fetch(`http://182.254.138.101/getChapter?novel=${name}&chapterId=${chapterId}&initial=${initial}`)
            .then(response => response.json())
            .then((json) => {
                dispatch(receiveInitialChapter(json));
            })
            .then(() => {
                dispatch(changeInitial());
            });
    };
};

触发receiveInitialChapter后会刷新,紧接着触发changeInitial。在changeInitial中我改变了state中的一条数据,比如isFetching由true变成false。 这条数据跟渲染没关系,当然它没导致刷新。然而我有一个在window上添加的scroll函数(原生的写法)需要这条数据的变化,所以导致了问题。当scrool函数触发的时候,isFetching一直是true,只有当下一次更新时,这个isFetching才会变成false。

求大神给出解决方案,感激不尽!!!另外,ImmutableJs在这种情况下有用吗?

另外还有一个关于redux devtool的问题
还是和上面的有关
这是devtool中receiveInitialChapter的state的一部分

isFetching(pin):false
initial(pin):false

changeInitial中的state也是

isFetching(pin):false
initial(pin):false

这两个在devtool中怎么会一样呢?我觉得receiveInitialChapter中的两个应该为true啊。因为我在changeInitial里才把它们变成false。

阅读 9.6k
2 个回答

最好通过connect将redux store转给component的props,render时读取props就可以了,也不用麻烦去通过state操作,在设计与redux关联的component时最好不用state。
参考: https://github.com/reactjs/re... 的connect部分。

我只用reactDOM.render()重刷整个DOM,把所有state都扔到redux里去。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进