问题标签 [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.
typescript - 如何使用 Typescript 在 Redux reducer 函数中实现详尽的 switch 语句?如何处理 Redux 内部的 @@redux 动作
我试图找到一个明确的答案这样做,但还没有找到一个。
SO上有一个问题可以回答如何实施详尽的switch
陈述:
如何检查 TypeScript 中的 switch 块是否详尽?
答案是:
编写一个函数,never
作为参数,返回never
并在调用任何东西时抛出。
并在您的default
情况下使用它:
但我不能在reducer
. 它可以检查我的 reducer 操作的详尽性,但会在运行时抛出,因为 Redux 会使用自己的内部操作调用它,例如:
那么switch
在 reducer 中处理详尽的语句的理想方法是什么?
reactjs - React/redux combineReducers 问题
我正在尝试将两个减速器与 redux 结合起来:增量和减量减速器。
在我的store.js文件中:
使用这条线import reducer from "./reducers/increment";
,按钮增量起作用。
使用这条线import reducer from "./reducers/decrement";
,按钮减量起作用。
有了这条线import reducer from "./reducers/index";
,计数器甚至不显示。
我的代码在这里给出。
请问我做错了什么?
如果两个减速器状态具有相同的计数器值怎么办?如果修改了 counter 的值,哪个是事实来源?
谢谢您的帮助。
react-redux - 触发相关组件刷新
我有一个 React-Redux 应用程序,它在用户首次登录时显示仪表板页面。仪表板显示了许多统计信息/图表等,它们是大多数(不是全部)根据状态站点值过滤的组件。此站点值最初是在用户登录时设置的,并且源自他们的配置文件。
组件大多遵循使用componentDidMount生命周期事件调用 thunk 方法的模式。在 thunk 方法中,从 redux 状态检索站点值并传递到数据库查询中。Reducer 然后将结果添加到状态。标准的东西。redux 状态相当平坦,即统计/图表等的状态没有嵌套在所选站点下,而是它们自己的根对象。
仪表板上还有一个包含所有站点的下拉列表。最初,这被设置为用户默认站点。此下拉列表旨在允许用户查看除默认站点之外的站点的统计信息/图表。
当用户从下拉列表中选择不同的站点时,我想要刷新所有(站点特定的)仪表板组件。我遇到的问题是如何让这些组件刷新?或者更具体地说,如何让他们的状态刷新。
更新:我尝试了两种不同的方法。
- 在用于处理站点更改效果 ( changeSite ) 的 thunk 操作中,我向每个组件 thunk 操作添加了调度调用。虽然这很有效,但我不喜欢changeSite thunk 需要了解其他组件以及要调用的动作创建者这一事实。即 thunk 动作看起来像:
- 在依赖组件中,将 Site 值包含在组件属性中,并与 componentDidUpdate 生命周期事件挂钩。检查站点是否已更改,然后调用 thunk 操作以更新组件状态。我更喜欢这种方法,因为它将业务逻辑保留在组件中,因此changeSite thunk 现在可以变成一个简单的 reducer 调用。依赖(站点故障)组件的示例如下所示:
#2 是最好的方法吗?有没有更好的办法?
javascript - Redux:根据 Actions 改变 Reducer 中初始状态的不同部分
我有以下减速器:
以及以下操作:
在某个组件的 componentDidLoad() 中调用了“startLoadingDishes”操作。但是,我想更改我的 discReducer 的初始状态,以便它包含附加信息,如下所示:
所以现在由 reducer 返回的 'action.dishes' [在 'LOAD_DISHES' 情况下] 应该放在状态的 'value' 部分,而不是整个状态。此外,如果菜肴之前已加载,则状态的“已加载”部分应设置为 true,依此类推。我知道这相当简单,但由于我是 React+Redux 的新手,我不知道如何正确更改 Action/Reducer 代码(同时保持状态不变性)。任何帮助表示赞赏。
reactjs - 一些值在第一次测试中未初始化
我有许多想要测试的 React/Redux 操作和减速器。我已经成功编写了一些测试,但是我在减速器测试中遇到了一个问题,其中一个值undefined
在第一个测试中被保留,但在第二个测试中正确初始化。
文件Reducers.test.js
initialState.js(这里大约有 20 个变量)
第一个控制台输出片段
第二个控制台输出片段
这到底是怎么回事?不久前我看到 reduxForm 有类似的问题,但没有这样的问题。
reactjs - React Native:Redux - 是否可以从 App.js 分派到 redux 商店?
我正在开发一个 react native 应用程序,我将所有东西都连接到一个 redux 商店,这样我就可以用这种方式管理数据。
我很好奇从App.js
我用来路由我的应用程序的组件中调度数据的可能性。用例是在 redux 存储中进行 API 调用App.js
并从那里设置数据,以便应用程序可能在每次打开时都进行该调用。例如,我知道 componentDidMount 在应用程序打开时运行一次代码,但除非它关闭并重新打开,否则再也不会运行代码。我认为这App.js
对于这样的事情可能会更好。如果这个假设不正确,我很抱歉,因为我还在学习。
在下面的示例中,如果可能的话,我将如何运行callApi
并setData
从App.js
Redux Store 运行?或者我应该避免这种尝试设置全局变量吗?
下面是示例代码:
应用程序.js
Reducer.js(我设置我的减速器是这样的)
Home.js(让我们说如果我想移动 callApi 也可以在 App.js 中运行)
reactjs - 当我的状态是数组而不是对象时,如何使用减速器更新状态
我在 reducer 函数中返回新状态时遇到问题。我的状态是一组对象。每个对象都有两个键值对类别:''和项目:[{}, {}, {}]。
我想删除 items 数组中的项目并保持其余部分不变。问题出在我的 reducer 函数中,并且我的 switch 语句返回了错误的值:
我不是要求快速修复,只是一个提示将不胜感激。
谢谢你们!
reactjs - 在 Typescripted Redux 中,我如何找到我的根 reducer 的类型?
我只需要根减速器的 ReturnType,但我组合了 3 个减速器。我怎样才能得到正确的打字?
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]。”
我做错了什么以及如何解决这个问题?