问题标签 [use-reducer]

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 回答
188 浏览

javascript - 使用 useReducer 和 MongoDB 的待办事项列表 - 在 Reducer 操作后更新数据库?

我尝试将我的 Todolist 与 MongoDB 连接以存储我的数据。由于不建议在减速器中获取和更新数据,我对在哪里更新数据库有点困惑。

我的想法是,每当我使用操作更改列表时,我都需要替换数据库上的整个列表,这对我来说似乎效率不高。但是,当我只更新数据库中已更改的元素时,我看不到使用 useReducer 的理由。

有人可以帮助我如何继续吗?:/

(这个 Todolist 在我尝试使用 useReducer 之前使用的是 useStates 和 MongoDB,这就是为什么 Routes 和 APIhelper 包含其他功能)

应用程序.js:

Todo.js:

APIHelper.js:

路线.js:

0 投票
1 回答
1216 浏览

javascript - 反应 useReducer 不更新状态

useReducer用来更新errorsState用户登录并失败的时间。我读过很多解决方案,据说dispatch是异步的,我知道,所以我把它console.log放进useEffect去看看errorsState变化,但不幸的是它没有改变。这是我的代码

登录.jsx

这是获取功能useLogin

AuthAction.js

我试过放在console.log里面ERRORS_ACTIONS.GET_ERRORS看看反应,很好。那么我哪里出错了?

0 投票
3 回答
1111 浏览

javascript - 使用减速器在 useEffect() 中反应无限循环

如果有应该播放的消息声音,我有一个useEffect()检查触发器布尔值的状态,并在播放后将活动消息触发器设置为 false 状态。

但是,useEffect() 进入了一个无限循环,导致应用程序崩溃。可能是因为更改状态会再次触发它(并且再次...)

通常,使用 useState,这很容易用类似的东西来修复useEffect(() => {logic}, [trigger])

就我而言,我没有使用 useState,但我正在使用减速器来更改状态。

Edit: The weird thing is, the reducer sometimes works to modify state, and sometimes it does not. It will execute without errors but the state remains unchanged.

让我向您展示我的注释代码:

如您所见,我不使用 useState 而是使用 reducer。据我所知,我经常发现的与以下类似的解决方案不是我的解决方案:

编辑:由于reducer在useEffect中使用时似乎没有修改状态,让我发布它的代码:

0 投票
1 回答
600 浏览

javascript - 无法从 setTimeout 中定义的函数中的 useReducer 挂钩访问更新的数据

在我的应用程序中,我在单击按钮时使用来自 useReducer 钩子的调度,在同一个函数中,我使用了 2 秒的 setTimeout。但是当我使用 usereducer 的调度存储数据时,我没有在 setTimeout 函数中获得更新的值。

我无法共享原始代码,但可以共享出现此问题的另一个演示应用程序的片段。

在上面的示例中,我使用调度将数据存储在减速器中,并且我在 2 秒后在按钮单击上调用 console.log("ButtonClick") 但即使在 2 秒后,我也没有在控制台中获取更新的数据。但是在 console.log("Render") 我得到更新的数据。

现场示例:https ://codepen.io/aadi-git/pen/yLJLmNa

0 投票
1 回答
50 浏览

reactjs - 如何从 useState 更改为 useReducer

以下代码我试图将其转换为 useReducer 但我无法弄清楚的几件事。在以下代码中,handleClick 更新状态并调用其他函数以进行进一步操作。在 useReducer 中,我可以更新状态但如何调用其他函数。

使用减速器

0 投票
1 回答
35 浏览

javascript - reducer - 更新完整状态

我想向减速器添加一个案例,我想在其中设置完整状态,而不是任何特定属性。

更新特定属性 [ SET_SELECTED_PAGE,UPDATE_MESSAGE_DISPLAYED] 工作正常。但是当我尝试时SET_INIT_DATA我得到错误Parsing error: Unexpected token, expected ","。有效负载SET_INIT_DATA将具有完整的 json。

我的状态会像

代码:

0 投票
1 回答
330 浏览

reactjs - 是否可以在单个按钮上的 useReducer hook 的 reducer 功能中管理不同的 switch case?

我有一个问题“制作一个具有 4 个级别的灯的“房间”——关闭、低、中、高——并在每次按下按钮时更改级别。创建第二个按钮来关闭灯。 我假设我需要通过按下一个按钮来管理三个级别,即低、中、高,就像我们切换状态一样,并且必须使用另一个按钮来关闭灯。但我的知识仅限于在单独的按钮上管理减速器的每个开关盒。

0 投票
1 回答
1306 浏览

javascript - 为什么在 useReducer 钩子中使用 switch 语句来管理状态?

让我们看看以下两种使用useReducer钩子进行状态管理的方法,它们都做同样的事情:单击添加按钮到+ 1,然后单击减法按钮到-1:

  1. 带开关:

  1. 无开关

哪一个是更好的管理状态的方法?我更喜欢 2 因为它更简单,允许我们以“类组件”的方式管理状态。我不明白为什么需要 1:它需要一个复杂的 switch 语句;如果要添加状态,则需要一个新案例。这一切看起来都很麻烦。

编辑:我知道这是一个不需要使用useReducer并且useState更好的简单示例,但我真正想讨论的是,当有多个状态时,哪个更好?

0 投票
1 回答
62 浏览

react-redux - 减速机外壳设定值延迟响应

当我在按钮单击上调度“REMOVE_TODO”时,它会执行我想要它执行的操作,我遇到的问题是它执行时。它不会返回正确的当前数组长度。

4 是数组中正确的项目数

现在,当我单击一个项目时,它将发送“TOGGLE_TODO”,这将更改字体颜色并在文本中添加一条线。

切换的项目

现在,在切换并单击“清除完成”按钮时,它会切换“REMOVE_TODO”并且工作正常。它删除切换的项目。我遇到的问题是,当我单击一次按钮时,该数字不会反映列表中剩余的当前项目数量。

号码错误

但是,如果我再次(或更多次)单击该按钮,则数字会更新为正确的总数

正确的号码

这是我的应用程序代码

这是我的减速器代码

有谁知道我做错了什么,或者我没有做什么?提前致谢!

0 投票
1 回答
164 浏览

javascript - 创建用于将 useReducer 组合和使用到另一个组件中的高阶函数给我一个错误

我想创建一个包含 useReducer 钩子作为单例的高阶函数,以便与其他组件复合。但我得到一个错误:

我的霍夫:

并尝试撰写:

我哪里做错了 ?