问题标签 [use-state]

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 投票
1 回答
75 浏览

reactjs - Can you invoke the same useState hook within the same function more than once?

So amidst refactoring my class based chatbot component to use react hooks I came across a problem with the useState hook overwriting the object in the state. This lead to only the bot responses showing up in the UI. When I chat with the bot, a flash of the user input shows in the UI then is overwritten by the chatbots response. Here is the code:

Is it possible to write useState like this, twice within the same async function? If not how do you propose I refactor this code so that the messages state returns an array of alternating objects such as:

0 投票
1 回答
80 浏览

javascript - 使用元素的子文本来设置/更新变量

有谁知道我可以对<li>以下组件中的元素做什么,以便单击其中一个<li>元素会将 activityType 设置为该特定元素中包含的文本<li>?例如,第一个<li>是“教育”。单击那个,我希望发生这种情况:setActivityType('education')。

有谁知道我可以<li>对以下组件中的元素做些什么,以便单击其中一个<li>s 将设置activityType为包含在特定内容中的文本<li>?例如,第一个<li>是“教育”。单击那个,我希望发生这种情况:setActivityType('education')

类型菜单.js:

更新:

我接受了给出的建议,并将每个<li>元素的子文本放入一个数组中。然后我映射到该数组,以创建个人<li>,给每个人一个 onClick,理想情况下,将设置activityType<li>我点击的文本。然后,我想根据activityType动态设置的任何内容进行 API 调用。使用下面的代码,我离解决这个问题又近了一步,但我仍然无法按activityType原样控制/更新代码。该 const 以空字符串的形式返回,这导致我的 API 调用被关闭。有什么建议么?

类型菜单.js:

0 投票
1 回答
874 浏览

reactjs - React,如何在不重绘的情况下更新状态,或者如何在没有 useState(和 useRef)的情况下触发 useEffect,或者如何停止无限循环

情况

  • 我想根据图像的高度重新分配网格(使用砌体方法)
  • 这些图像是延迟加载的

我想要的是

  • 加载图像时,它们会发送一个标志,该标志使砌体逻辑重新分配网格,每个人都很高兴
  • 然后当用户滚动时,加载更多图像,再次触发标志,砌体再次调整网格

怎么了

*const [myState, setMyState] = use State(0)

  • 加载图像时,我setMyState(1)
  • 在砌体逻辑中,我有一个useLayoutEffect(() =>{}, [myState])所以当状态改变时,我调整网格
  • 然后我用 重置状态setMyState(0),这样当加载新图像时它会再次触发useLayoutEffect
  • 但是,当我重置状态时,它会重新绘制图像,因此图像会再次加载并再次触发useLayoutEffect,这会再次重置状态,从而创建无限循环
  • 如果我不重置状态,则循环停止
  • 但是,当使用滚动加载新图像时,setMyState(1)不会更改任何内容并且useLayoutEffect不会触发

所以我现在卡住了

这是一个简化的代码


尝试 1

我无法更改 中的状态useLayoutEffect,所以我只会在加载图像时更改内容,而不是再次更改

问题

当我滚动并加载更多图像时,我无法再触发 useLayoutEffect


尝试 2

如果我不想重绘,但想触发 useLayoutEffect,我可以使用useRef而不是useState

但是codeandbox已经警告我imageLoaded.current不会导致组件的重新渲染(即使我或多或少想要这个?)

所以最后,我看到imageLoaded.current加载新图像时增加,但useLayoutEffect没有触发

0 投票
1 回答
68 浏览

reactjs - useState 在执行作为道具传递的函数时导致缓慢

我有一个反应本机应用程序,其中我有一个颜色配置,一种主题,我有一个特定的屏幕,我传递了一个类似 props 的函数,它被执行并更新全局颜色,但是它会导致大约一秒的延迟

这是我的应用

这是我进行颜色配置的屏幕

任何帮助或解释发生的事情我将不胜感激。

0 投票
1 回答
964 浏览

javascript - 在 React 中使用 useState 存储对象列表并添加到该列表中

我必须使用 React 中的 useState 挂钩将对象列表存储在数组中。我有带有 onChange 的输入字段,我得到了它的值并尝试在列表中的一个对象中放置/更新它。输入在一个类似结构的表格中,每一行代表一个集合。每列是代表次数、rpe 和重量。这些值属于每个集合,需要保存在数组中的一个对象中。目前,当您编辑时,它不会保存您所做的所有事情,而只会保存您在该行中所做的最后一件事。

0 投票
0 回答
4818 浏览

reactjs - useState 不更新状态

我正在尝试使用函数内的输入搜索过滤用户searchByName。我设法在copyUsers变量中得到正确的结果,但不幸的是它并没有反映状态内部的变化。

忘了提一下,使用带有钩子和打字稿的裸 React-App。

例如,我在输入中写入“p”并在copyUsers变量中接收正确的过滤数组,但然后我将其推入它不更新的状态。

附上截图以更好地了解情况:

在此处输入图像描述

我尝试过的是 setFilteredUsers(copyUsers):

  • setFilteredUsers(() => [...filteredUsers, copyUsers]);

  • setFilteredUsers(() => copyUsers);

主要成分:

0 投票
0 回答
382 浏览

reactjs - 在重新渲染时从 Props 设置值后,React useState 未更新

我是新来的反应和使用钩子

我想要实现的是单击提交按钮后,获取必要的预期值,然后通过将状态设置为新对象,将所有字段重置为空白。

我能够获得必要的值,并且我希望将状态值设置为新的默认对象会重置文本字段的值,但似乎我失败了。

有人会告诉我为什么会发生这种行为吗?

顺便说一句:使用 material-ui 文本字段

该设置位于:https ://github.com/blackmo18/react-usestate-error.git

这是我的组件结构:

每个组件的伪代码:

数据类

注册组件

PersonDetails 组件

学生部分

守护者组件

0 投票
1 回答
25 浏览

react-hooks - 将类组件转换为 useState

这是一个使用 state 和 setState 的类组件,但我想使用 useState。此外,除了能够使用功能组件而不是类基组件之外,还有什么好处?

至今...

0 投票
1 回答
158 浏览

javascript - 将数据推送到数组后更新 Sate 时,React 功能组件未呈现

我正在尝试创建一个动态输入表单,用户可以在其中添加新输入。

问题

组件在更新时未呈现,State但是当我打开Model存在于使用 aState打开/关闭它的同一组件中的 a 时,数组中的所有推送元素一次显示。

我没有编写代码Modal以便更容易阅读代码

我的代码

JSX

0 投票
3 回答
2516 浏览

reactjs - setState 不能通过 useState 中的 onChange 工作

我正在使用 useState Hook 存储表单以在用户单击时管理视图。界面显示良好,但我无法在输入字段中输入值。谁能告诉我为什么?谢谢。