我的理解可能有错误,有的话请大神指出。
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。
最好通过connect将redux store转给component的props,render时读取props就可以了,也不用麻烦去通过state操作,在设计与redux关联的component时最好不用state。
参考: https://github.com/reactjs/re... 的connect部分。