哎呀,我对此感到很愚蠢,但我已经阅读了以下内容的每一部分:http: //redux.js.org/(完成了egghead 教程,并阅读了 4 次常见问题解答:http : //redux.js.org/文档/常见问题解答/ImmutableData.html
我所做的是存根我的一个减速器,总是返回状态,这是唯一被调用的减速器(用断点检查)。即便如此,每次减速器返回状态时都会调用我的订阅事件。我不明白什么?(Action.SetServerStats 以 1Hz 的速率调用,订阅也以 1Hz 的速率调用
顺便说一句,Chrome Redux 扩展说状态是平等的,并且带有跟踪 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)))
Run Code Online (Sandbox Code Playgroud)
减速器.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 })
Run Code Online (Sandbox Code Playgroud)
正确的。Redux 将在每次调度 action 时执行所有订阅回调,即使状态没有以任何方式更新。然后由订阅回调来做一些有意义的事情,例如调用getState()和检查状态的某些特定部分是否发生了变化。
React-Redux 就是一个例子。连接组件类的每个实例都是存储的单独订阅者。每次分派动作时,由 生成的所有包装器组件connect将首先检查根状态值是否已更改,如果已更改,则运行mapStateToProps它们提供的函数以查看 的输出是否mapState已更改。 如果该mapState输出发生更改,则包装器组件将重新渲染您的“真实”组件。
您可能想阅读我的博客文章Practical Redux,第 6 部分:连接列表、表单和性能,其中讨论了与 Redux 性能相关的几个重要方面。我的新文章Idiomatic Redux: The Tao of Redux, Part 1 - Implementation and Intent也详细介绍了 Redux 的几个部分是如何实际工作的。
| 归档时间: |
|
| 查看次数: |
666 次 |
| 最近记录: |