问题标签 [redux-reducers]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
reactjs - 从 reducer 收到数据后 Redux React 状态未设置
我确实有一个组件,其中
我有一个调用 API 并返回数据的减速器,我使用了
我正在获取数据并且正在显示
根据我的理解,它的设置类型为名为 mediaJson 的状态,再次在另一个点击功能中
并试图控制 mediaContent 这越来越不确定
redux - Redux 中的 reducer 必须严格返回一个新的 state 对象吗?
Redux 中 reducer 的一个规则是:我们应该将 state 视为只读,并返回一个新对象作为新 state。
但是有一个灰色地带:它必须严格返回一个新对象作为状态,还是我们可以返回相同的状态对象?
似乎通过查看常见代码,例如:
如果action.type
未知,则返回相同的状态对象。所以规则是reducer不必严格返回一个新的状态对象,但可以返回相同的。但是严格的规则是状态必须是只读的?
redux - 当我们说我们不能在 Redux reducer 中改变状态对象时,究竟是什么意思?
这是否意味着将其视为“只读”?
例如,如果状态是:
对于这四个中的任何一个没有变化的,我们可以保持原样,但是我们说 3 level down obj
,即obj.b.c.d
,并且 thisd
指的是一个数组,我们需要修改数组中的一个条目,那么我们需要制作该数组的副本,修改条目,并让新状态引用它?但是如果d
指的是一个新数组,那么就c
需要一个新的d
,所以c
需要一个新的对象,出于同样的原因,我们需要一个新的b
,最终,一个新的obj
?
所以它是
现在objNew
可以返回,并且没有以任何方式修改旧状态(仅读取它)。
因此,如果prevState
是旧状态,并且state
是新状态,我们只需要在返回新状态之前确保正确,因为prevState
,如果我们要转储所有值,它与传入的值保持一致,而新状态将转储我们新状态的值。
reactjs - 在 Redux reducer 中,如果 state 没有定义,你能立即返回初始状态吗?
我见过 3 种形式的减速器:
它们都一样吗?表格 1 和表格 2 的不同之处在于表格 1 立即返回初始状态,根本不看和照顾action.type
。
而且我认为Form 2和Form 3完全一样,使用默认参数值。
任何官方文档或规范都可以证实任何声明吗?它认为这意味着,第一次调用减速器时,action.type
不会有任何意义。
reactjs - 所有的 redux 动作都应该有相应的 reducer 吗?
我认为 Redux 对于调试非常有用,因为它可以跟踪您的应用在其开发工具中调度了哪些操作。调度一个动作而不打算用减速器处理它是不好的做法吗?
例如,我想进行 AJAX 调用并根据响应更新本地反应组件状态,但仍希望在开发工具中记录此调用以进行调试。我想创建一个动作创建器,使用 react-redux 的连接包装器中的 react-redux mapDispatchToProps 属性将它连接到我的组件,但我的减速器函数中从来没有处理这个动作的案例。
redux - 使用选择器从 API 调用中计算派生数据会比在 reducer 中执行得更好吗?(对于这个用例)
假设我有一个音乐商店应用程序,用户可以在其中搜索吉他。在初始页面加载时,我获取了几种吉他来显示:(原声、电声和贝斯)。吉他结果页面通过单个 API 调用一起返回,但永远不会一起显示。因此,它们必须在某个时候进行过滤。要查看不同类别的吉他,用户将从 React 组件切换他们查看的类别。
似乎有两种主要方法可以使用不可变和 redux 来解决这个问题。
在策略一中,我在数据到达时过滤 category 上的数据,并将其单独存储在 redux 存储中。当我想检索数据时,我在选择器中指定类别。
在策略 2 中,所有进来的 API 数据都存储在一个聚合列表“all”中。当我想检索特定类别的吉他时,我使用选择器从聚合数据中过滤和显示。
策略一:
策略二:
一种模式会比另一种模式提供更好的性能吗?哪种模式更好地遵循 redux 的最佳实践?
我听说最好选择选择器来计算派生数据,并且当对数据执行另一个操作(例如在选项卡之间切换)时,记忆将缓存结果以供使用。因此,我不清楚更喜欢哪种策略。
javascript - 我的 combineReducers 中可以有一个带有 JavaScript Reducers 的 TypeScript Reducer 吗?
我正在尝试将 TypeScript 集成到我的大型代码库的一部分中。在上面的示例中,假设前两个 reducer 是 JavaScript,最后一个是 TypeScript。代码编辑器似乎建议我需要将文件设置为 TypeScript,但是当我这样做时,我的导入出现错误并且无法编译。
然后似乎希望我将两个 JavaScript 减速器转换为 TypeScript。这不切实际,因为我现在只想将两个 JavaScript 缩减程序保留为 JavaScript。如果我将文件保留为 JavaScript,则会出现编译错误。我已经能够让 TypeScript 很好地编译并将内容渲染到屏幕上,但只是与减速器集成似乎是一个问题。
我的 combineReducers 中是否可以有一个带有 JavaScript Reducers 的 TypeScript Reducer,如果可以,怎么做?
附言。以上只是一个示例,实际的 combineReducers 中有 15 个左右的 reducer,现在将它们全部转换是不切实际的。
reactjs - reducer 的参数不会在调度时更新
我认为我的代码是正确的,它会检查 QueryString 是否未定义。如果是,则“thePath”从配置文件中获取值。如果 QueryString 有一个值(这意味着不再未定义),那么让 'thePath' 的值是 QueryString。它可以工作,但它不会在函数的 return(dispatch) 部分中更新.. 为什么?
该函数用于根据 axios 的结果设置不同的操作,最终成为 reducer 和 redux store 的一部分。
更新:它在哪里被派出
reactjs - Redux 将对象添加到数组中,仅对第一条记录不起作用
使用 Redux 将对象添加到数组时,由于某种原因,添加第一条记录不起作用。
我会收到以下错误:
使用此代码:
我想了解为什么这种方法在我认为应该有效的时候却不起作用。
这是我管理它添加的方式(第一条记录没有错误 - 所有后续添加都可以在初始代码中正常工作)
修复有效,但我想看看第一种方法哪里出错了。
这是我的整个减速器: