【发布时间】:2017-05-09 17:19:38
【问题描述】:
哎呀,我对此感到很愚蠢,但我已经阅读了以下内容:http://redux.js.org/(完成了蛋头教程,并阅读了 4 次常见问题解答:http://redux.js.org/docs/faq/ImmutableData.html
我所做的是存根我的减速器之一,始终返回状态,这是唯一被调用的减速器(用断点检查)。即便如此,每次减速器返回状态时都会调用我的订阅事件。我不明白什么? (Action.SetServerStats 以 1Hz 速率调用,订阅也以 1Hz 速率调用
顺便说一句,Chrome Redux 扩展表示状态是相同的,而带有 Trace React 更新的 Chrome 的 React 扩展没有显示任何更新。
当有人提示我时,我会很高兴删除这个问题。但现在,我看到每个减速器都以 1Hz 的频率被调用,并且它们都返回了他们得到的存储部分(状态)。
所以我不理解订阅,即使商店树没有被修改,它每次都会返回(并且由 react-redux 进行浅层比较以找出发生了什么变化?)
创建商店并订阅
let store = createStore(reducer, initialState, composeWithDevTools(applyMiddleware(thunk)))
store.subscribe(() => console.log("current store: ", JSON.stringify(store.getState(), null, 4)))
reducers.js
import A from './actionTypes'
import { combineReducers } from 'redux'
export const GLVersion = (state = '', action) => {
switch (action.type) {
case A.SetGLVersion:
return action.payload
default:
return state
}
}
export const ServerConfig = (state = {}, action) => {
switch (action.type) {
case A.SetServerConfig: {
let { ServerPort, UserID, PortNumber, WWWUrl, SourcePath, FMEPath } = action.payload
let p = { ServerPort, UserID, PortNumber, WWWUrl, SourcePath, FMEPath }
return p
}
default:
return state
}
}
export const ServerStats = (state = {}, action) => {
switch (action.type) {
case A.SetServerStats:
return state
// let { WatsonInstalled, WatsonRunning, FMERunning, JobsDirSize } = action.payload
// let s = { WatsonInstalled, WatsonRunning, FMERunning, JobsDirSize }
// return s
default:
return state
}
}
export default combineReducers({ GLVersion, ServerConfig, ServerStats })
【问题讨论】:
标签: redux