gpt4 book ai didi

每次分派(dispatch)操作时,Redux 都会执行所有订阅回调吗?

转载 作者:行者123 更新时间:2023-12-02 20:47:11 25 4
gpt4 key购买 nike

哎呀,我觉得这很愚蠢,但我已经阅读了以下内容的所有部分:http://redux.js.org/ (完成了 Nerd 教程,并阅读了 4 遍常见问题解答:http://redux.js.org/docs/faq/ImmutableData.html

我所做的是 stub 我的一个 reducer ,以始终返回状态,这是唯一被调用的 reducer (使用断点检查)。即便如此,每次 reducer 返回状态时,我的订阅事件都会被调用。我不明白什么? (Action.SetServerStats 正在以 1Hz 的速率被调用,订阅也以 1Hz 的速率被调用

顺便说一句 Chrome Redux 扩展表示状态是相等的,而带有 Trace React Updates 的 Chrome React 扩展则没有显示任何更新。

当有人向我提供线索时,我会很高兴消除这个问题。但是现在,我看到每个 reducer 都以 1Hz 的频率被调用,并且所有 reducer 都返回它们获得的存储切片(状态)。

所以我不明白订阅,即使存储树没有被修改,它每次都会返回(并且由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 })

最佳答案

正确。每次分派(dispatch)操作时,Redux 都会执行所有订阅回调,即使状态没有以任何方式更新。然后由订阅回调执行一些有意义的操作,例如调用 getState() 并检查状态的某些特定部分是否已更改。

React-Redux 就是一个例子。连接组件类的每个实例都是存储的单独订阅者。每次分派(dispatch)操作时,connect 生成的所有包装器组件都会首先检查根状态值是否已更改,如果是,则运行 mapStateToProps 函数他们被要求查看 mapState 的输出是否发生了变化。 如果 mapState 输出发生变化,那么包装器组件将重新渲染您的“真实”组件。

您可能想阅读我的博客文章 Practical Redux, Part 6: Connected Lists, Forms, and Performance ,其中讨论了与 Redux 性能相关的几个重要方面。我的新帖子Idiomatic Redux: The Tao of Redux, Part 1 - Implementation and Intent还详细介绍了 Redux 的几个部分的实际工作原理。

关于每次分派(dispatch)操作时,Redux 都会执行所有订阅回调吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43876133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com