问题标签 [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 投票
2 回答
552 浏览

typescript - 如何使用 Typescript 在 Redux reducer 函数中实现详尽的 switch 语句?如何处理 Redux 内部的 @@redux 动作

我试图找到一个明确的答案这样做,但还没有找到一个。

SO上有一个问题可以回答如何实施详尽的switch陈述:

如何检查 TypeScript 中的 switch 块是否详尽?

答案是:

编写一个函数,never作为参数,返回never并在调用任何东西时抛出。

并在您的default情况下使用它:

但我不能在reducer. 它可以检查我的 reducer 操作的详尽性,但会在运行时抛出,因为 Redux 会使用自己的内部操作调用它,例如:

那么switch在 reducer 中处理详尽的语句的理想方法是什么?

0 投票
1 回答
37 浏览

reactjs - React/redux combineReducers 问题

我正在尝试将两个减速器与 redux 结合起来:增量和减量减速器。

在我的store.js文件中:

使用这条线import reducer from "./reducers/increment";,按钮增量起作用。

使用这条线import reducer from "./reducers/decrement";,按钮减量起作用。

有了这条线import reducer from "./reducers/index";计数器甚至不显示

我的代码在这里给出。

请问我做错了什么?

如果两个减速器状态具有相同的计数器值怎么办?如果修改了 counter 的值,哪个是事实来源?

谢谢您的帮助。

0 投票
0 回答
46 浏览

react-redux - 触发相关组件刷新

我有一个 React-Redux 应用程序,它在用户首次登录时显示仪表板页面。仪表板显示了许多统计信息/图表等,它们是大多数(不是全部)根据状态站点值过滤的组件。此站点值最初是在用户登录时设置的,并且源自他们的配置文件。

组件大多遵循使用componentDidMount生命周期事件调用 thunk 方法的模式。在 thunk 方法中,从 redux 状态检索站点值并传递到数据库查询中。Reducer 然后将结果添加到状态。标准的东西。redux 状态相当平坦,即统计/图表等的状态没有嵌套在所选站点下,而是它们自己的根对象。

仪表板上还有一个包含所有站点的下拉列表。最初,这被设置为用户默认站点。此下拉列表旨在允许用户查看除默认站点之外的站点的统计信息/图表。

当用户从下拉列表中选择不同的站点时,我想要刷新所有(站点特定的)仪表板组件。我遇到的问题是如何让这些组件刷新?或者更具体地说,如何让他们的状态刷新。

更新:我尝试了两种不同的方法。

  1. 在用于处理站点更改效果 ( changeSite ) 的 thunk 操作中,我向每个组件 thunk 操作添加了调度调用。虽然这很有效,但我不喜欢changeSite thunk 需要了解其他组件以及要调用的动作创建者这一事实。即 thunk 动作看起来像:
  1. 在依赖组件中,将 Site 值包含在组件属性中,并与 componentDidUpdate 生命周期事件挂钩。检查站点是否已更改,然后调用 thunk 操作以更新组件状态。我更喜欢这种方法,因为它将业务逻辑保留在组件中,因此changeSite thunk 现在可以变成一个简单的 reducer 调用。依赖(站点故障)组件的示例如下所示:

#2 是最好的方法吗?有没有更好的办法?

0 投票
1 回答
76 浏览

javascript - Redux:根据 Actions 改变 Reducer 中初始状态的不同部分

我有以下减速器:

以及以下操作:

在某个组件的 componentDidLoad() 中调用了“startLoadingDishes”操作。但是,我想更改我的 discReducer 的初始状态,以便它包含附加信息,如下所示:

所以现在由 reducer 返回的 'action.dishes' [在 'LOAD_DISHES' 情况下] 应该放在状态的 'value' 部分,而不是整个状态。此外,如果菜肴之前已加载,则状态的“已加载”部分应设置为 true,依此类推。我知道这相当简单,但由于我是 React+Redux 的新手,我不知道如何正确更改 Action/Reducer 代码(同时保持状态不变性)。任何帮助表示赞赏。

0 投票
0 回答
28 浏览

reactjs - 一些值在第一次测试中未初始化

我有许多想要测试的 React/Redux 操作和减速器。我已经成功编写了一些测试,但是我在减速器测试中遇到了一个问题,其中一个值undefined在第一个测试中被保留,但在第二个测试中正确初始化。

文件Reducers.test.js

initialState.js(这里大约有 20 个变量)

第一个控制台输出片段

第二个控制台输出片段

这到底是怎么回事?不久前我看到 reduxForm 有类似的问题,但没有这样的问题。

0 投票
2 回答
1343 浏览

reactjs - React Native:Redux - 是否可以从 App.js 分派到 redux 商店?

我正在开发一个 react native 应用程序,我将所有东西都连接到一个 redux 商店,这样我就可以用这种方式管理数据。

我很好奇从App.js我用来路由我的应用程序的组件中调度数据的可能性。用例是在 redux 存储中进行 API 调用App.js并从那里设置数据,以便应用程序可能在每次打开时都进行该调用。例如,我知道 componentDidMount 在应用程序打开时运行一次代码,但除非它关闭并重新打开,否则再也不会运行代码。我认为这App.js对于这样的事情可能会更好。如果这个假设不正确,我很抱歉,因为我还在学习。

在下面的示例中,如果可能的话,我将如何运行callApisetDataApp.jsRedux Store 运行?或者我应该避免这种尝试设置全局变量吗?

下面是示例代码:

应用程序.js

Reducer.js(我设置我的减速器是这样的)

Home.js(让我们说如果我想移动 callApi 也可以在 App.js 中运行)

0 投票
2 回答
381 浏览

reactjs - 当我的状态是数组而不是对象时,如何使用减速器更新状态

我在 reducer 函数中返回新状态时遇到问题。我的状态是一组对象。每个对象都有两个键值对类别:''项目:[{}, {}, {}]

我想删除 items 数组中的项目并保持其余部分不变。问题出在我的 reducer 函数中,并且我的 switch 语句返回了错误的值:

我不是要求快速修复,只是一个提示将不胜感激。

谢谢你们!

0 投票
1 回答
29 浏览

reactjs - 在 Typescripted Redux 中,我如何找到我的根 reducer 的类型?

我只需要根减速器的 ReturnType,但我组合了 3 个减速器。我怎样才能得到正确的打字?

0 投票
1 回答
18 浏览

javascript - ActionCreators 和 Actions 可以与 Redux 混合使用吗?

我的经验主要是 React Hooks & Context,其中定义了 Actions & Reducers。然后将 Actions 导入 React 组件并通过 Dispatch 函数调用。

在一个新项目中,我必须使用 React Hooks 和 Redux。这里我使用的是 Action Creators & Reducers。这是我创建的 Action Creator 的示例:

这很好用。

这是我的情况:我需要有一个动作来创建一个“空”的公司,所以没有必要创建一个动作创建者。因此我创建了一个这样的动作:

使用 Action Creator,我从内部调用它,useEffect如下所示:

使用 Action,我想我可以以与我一直使用 Context 调用动作的方式类似的方式调用它,如下所示:

不幸的是,我收到了这个流错误:“无法 InitEmptyCompanyAction从值位置引用类型 [1]。”

我做错了什么以及如何解决这个问题?

0 投票
2 回答
283 浏览

javascript - 在 React 钩子中设置数据?

这是我的代码。

我想setCurrentNoticenotice价值,就在dispatch完成之后。

以下是 的数据notice

在此处输入图像描述