问题标签 [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.

0 投票
0 回答
33 浏览

reactjs - 从 reducer 收到数据后 Redux React 状态未设置

我确实有一个组件,其中

我有一个调用 API 并返回数据的减速器,我使用了

我正在获取数据并且正在显示

根据我的理解,它的设置类型为名为 mediaJson 的状态,再次在另一个点击功能中

并试图控制 mediaContent 这越来越不确定

0 投票
1 回答
502 浏览

redux - Redux 中的 reducer 必须严格返回一个新的 state 对象吗?

Redux 中 reducer 的一个规则是:我们应该将 state 视为只读,并返回一个新对象作为新 state。

但是有一个灰色地带:它必须严格返回一个新对象作为状态,还是我们可以返回相同的状态对象?

似乎通过查看常见代码,例如:

如果action.type未知,则返回相同的状态对象。所以规则是reducer不必严格返回一个新的状态对象,但可以返回相同的。但是严格的规则是状态必须是只读的?

0 投票
1 回答
22 浏览

redux - 当我们说我们不能在 Redux reducer 中改变状态对象时,究竟是什么意思?

这是否意味着将其视为“只读”?

例如,如果状态是:

对于这四个中的任何一个没有变化的,我们可以保持原样,但是我们说 3 level down obj,即obj.b.c.d,并且 thisd指的是一个数组,我们需要修改数组中的一个条目,那么我们需要制作该数组的副本,修改条目,并让新状态引用它?但是如果d指的是一个新数组,那么就c需要一个新的d,所以c需要一个新的对象,出于同样的原因,我们需要一个新的b,最终,一个新的obj

所以它是

现在objNew可以返回,并且没有以任何方式修改旧状态(仅读取它)。

因此,如果prevState是旧状态,并且state是新状态,我们只需要在返回新状态之前确保正确,因为prevState,如果我们要转储所有值,它与传入的值保持一致,而新状态将转储我们新状态的值。

0 投票
3 回答
666 浏览

reactjs - 在 Redux reducer 中,如果 state 没有定义,你能立即返回初始状态吗?

我见过 3 种形式的减速器:

它们都一样吗?表格 1 和表格 2 的不同之处在于表格 1 立即返回初始状态,根本不看和照顾action.type

而且我认为Form 2和Form 3完全一样,使用默认参数值。

任何官方文档或规范都可以证实任何声明吗?它认为这意味着,第一次调用减速器时,action.type不会有任何意义。

0 投票
1 回答
226 浏览

javascript - 为什么redux Reducer中的状态变量不增加1

我在网页上有一个简单的两个按钮,一个用于递增,一个用于递减整数。 在此处输入图像描述

一旦我点击+按钮,它将在当前值上加 1。

下面是我的减速器,我已经用 a 包裹了“INCREMENT”setTimeout,当我点击+按钮时,我希望在 2 秒后在页面上看到1,但是一旦点击发生,它就会给我77,而无需等待 2 秒,为什么会发生这种情况,为什么每次都是 77?

ps 我可能需要一个中间件来处理这个异步操作,但我试图了解发生了什么

谢谢

0 投票
1 回答
379 浏览

reactjs - 所有的 redux 动作都应该有相应的 reducer 吗?

我认为 Redux 对于调试非常有用,因为它可以跟踪您的应用在其开发工具中调度了哪些操作。调度一个动作而不打算用减速器处理它是不好的做法吗?

例如,我想进行 AJAX 调用并根据响应更新本地反应组件状态,但仍希望在开发工具中记录此调用以进行调试。我想创建一个动作创建器,使用 react-redux 的连接包装器中的 react-redux mapDispatchToProps 属性将它连接到我的组件,但我的减速器函数中从来没有处理这个动作的案例。

0 投票
1 回答
69 浏览

redux - 使用选择器从 API 调用中计算派生数据会比在 reducer 中执行得更好吗?(对于这个用例)

假设我有一个音乐商店应用程序,用户可以在其中搜索吉他。在初始页面加载时,我获取了几种吉他来显示:(原声、电声和贝斯)。吉他结果页面通过单个 API 调用一起返回,但永远不会一起显示。因此,它们必须在某个时候进行过滤。要查看不同类别的吉他,用户将从 React 组件切换他们查看的类别。

似乎有两种主要方法可以使用不可变和 redux 来解决这个问题。

在策略一中,我在数据到达时过滤 category 上的数据,并将其单独存储在 redux 存储中。当我想检索数据时,我在选择器中指定类别。

在策略 2 中,所有进来的 API 数据都存储在一个聚合列表“all”中。当我想检索特定类别的吉他时,我使用选择器从聚合数据中过滤和显示。

策略一:

策略二:

一种模式会比另一种模式提供更好的性能吗?哪种模式更好地遵循 redux 的最佳实践?

我听说最好选择选择器来计算派生数据,并且当对数据执行另一个操作(例如在选项卡之间切换)时,记忆将缓存结果以供使用。因此,我不清楚更喜欢哪种策略。

0 投票
1 回答
86 浏览

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,现在将它们全部转换是不切实际的。

0 投票
1 回答
291 浏览

reactjs - reducer 的参数不会在调度时更新

我认为我的代码是正确的,它会检查 QueryString 是否未定义。如果是,则“thePath”从配置文件中获取值。如果 QueryString 有一个值(这意味着不再未定义),那么让 't​​hePath' 的值是 QueryString。它可以工作,但它不会在函数的 return(dispatch) 部分中更新.. 为什么?

该函数用于根据 axios 的结果设置不同的操作,最终成为 reducer 和 redux store 的一部分。

更新:它在哪里被派出

0 投票
1 回答
362 浏览

reactjs - Redux 将对象添加到数组中,仅对第一条记录不起作用

使用 Redux 将对象添加到数组时,由于某种原因,添加第一条记录不起作用。

我会收到以下错误:

使用此代码:

我想了解为什么这种方法在我认为应该有效的时候却不起作用。

这是我管理它添加的方式(第一条记录没有错误 - 所有后续添加都可以在初始代码中正常工作)

修复有效,但我想看看第一种方法哪里出错了。

这是我的整个减速器: