首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我想用react useState()添加数组的用户输入对象,当我发送它时,它不会更新问题?

要解决这个问题,你可以按照以下步骤进行操作:

  1. 首先,确保你已经正确地导入了React和useState钩子函数。
  2. 在函数组件中,使用useState钩子函数来创建一个状态变量,用于存储用户输入的对象数组。初始值可以为空数组,例如:const [userInputs, setUserInputs] = useState([]);
  3. 创建一个处理用户输入的函数,例如handleInputChange,用于更新用户输入的对象。该函数应该接收一个事件对象作为参数,并从中获取用户输入的值。
  4. 在用户输入发生变化时,调用handleInputChange函数来更新用户输入的对象。例如,你可以在输入框的onChange事件中调用该函数,将用户输入的值更新到对应的对象属性中。
  5. 当你想要发送用户输入的对象时,确保你使用了最新的userInputs状态变量。你可以在发送请求的函数中访问userInputs变量,并将其作为请求的参数或体部分。

以下是一个示例代码:

代码语言:txt
复制
import React, { useState } from 'react';

const MyComponent = () => {
  const [userInputs, setUserInputs] = useState([]);

  const handleInputChange = (event, index) => {
    const { name, value } = event.target;
    const updatedInputs = [...userInputs];
    updatedInputs[index] = { ...updatedInputs[index], [name]: value };
    setUserInputs(updatedInputs);
  };

  const handleSubmit = () => {
    // 在这里发送用户输入的对象
    console.log(userInputs);
  };

  const addUserInput = () => {
    setUserInputs([...userInputs, {}]);
  };

  return (
    <div>
      {userInputs.map((input, index) => (
        <div key={index}>
          <input
            type="text"
            name="name"
            value={input.name || ''}
            onChange={(event) => handleInputChange(event, index)}
          />
          <input
            type="text"
            name="email"
            value={input.email || ''}
            onChange={(event) => handleInputChange(event, index)}
          />
        </div>
      ))}
      <button onClick={addUserInput}>添加用户输入</button>
      <button onClick={handleSubmit}>发送</button>
    </div>
  );
};

export default MyComponent;

在这个示例中,我们使用了useState钩子函数来创建userInputs状态变量,用于存储用户输入的对象数组。handleInputChange函数用于更新用户输入的对象,而handleSubmit函数用于在发送请求时访问用户输入的对象。addUserInput函数用于添加新的用户输入对象。

这样,当你点击"添加用户输入"按钮时,会添加一个新的输入框,你可以在输入框中输入用户的姓名和电子邮件。当你点击"发送"按钮时,会将用户输入的对象打印到控制台。

请注意,这只是一个简单的示例,你可以根据自己的需求进行修改和扩展。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

教你如何在 React 中逃离闭包陷阱 ...

一个常见问题 比如现在有这样一个场景:你正在实现一个带有几个输入字段表单。其中一个字段是来自某个外部组件库。你无法访问内部结构,所以也没办法解决性能问题。...然后,我们把保存在 something 函数之外一个对象中。 当我们下一次调用 something 函数,我们将返回之前创建闭包,而不是创建一个带有新闭包新函数。...我们 ref 在创建只会初始化一次,并且不会自行更新。这基本上就是我们一开始创建逻辑,只是我们传递不是值,而是我们想要保留函数。...我们在 onClick 中值从未更新过,你能告诉为什么吗? 当然,这又是一个过期闭包。当我们创建 onClick ,首先使用默认状态值(undefined)形成闭包。... onClick 回调可以访问组件中最新数据,而不会破坏 memoization。现在,我们可以安全地将所需一切发送到后端!

51940

(译) 如何使用 React hooks 获取 api 接口数据

并且使用 useState setData 来更新组件状态。 但是如上代码运行时候,你会发现一个特别烦人循环问题。...我们只想在组件第一次加载时候获取数据 ,这也就是为什么你可以提供一个空数组作为 useEffect 第二个参数以避免在组件更新时候也触发。当然,这样的话,也就是在组件加载时候触发。...缺少一件:当你尝试输入字段键入内容时候,他是不会再去触发请求。...当我们使用 async/await 时候,我们可以使用try/catch,如下: import React, { Fragment, useState, useEffect } from 'react...之前已经在这里写过关于这个问题文章,描述了如何防止在各种场景中为未加载组件中设置状态。

28.4K20

React Hooks vs React Component

看下面的代码示例, withUser函数就是一个高阶组件,返回了一个新组件,这个组件具有了提供获取用户信息功能。 ?...我们用class来创建react组件,还有一件很麻烦事情,就是this指向问题。...其次,useState接收初始值没有规定一定要是string/number/boolean这种简单数据类型,完全可以接收对象或者数组作为参数。...当react要渲染我们组件,它会先记住我们用到副作用。等react更新了DOM之后,再依次执行我们定义副作用函数。...当我们第二个参数传一个空数组[],其实就相当于只在首次渲染时候执行。也就是componentDidMount加componentWillUnmount模式。不过这种用法可能带来bug,少用。

3.3K30

快速了解 React Hooks 原理

类组件有一个大state对象,一个函数this.setState一次改变整个state对象。 函数组件根本没有状态,但useState hook允许我们在需要添加很小状态块。...React第一次渲染函数组同时会创建一个对象与之共存,该对象是该组件实例定制对象,而不是全局对象。只要组件存在于DOM中,这个组件对象就会一直存在。...其中做一件事设置 Hooks 数组开始是空, 每次调用一个hookReact 都会向该数组添加该 hook。...下次渲染,同样3个hooks以相同顺序被调用,所以React可以查看数组,并发现已经在位置0有一个useState hook ,所以React不会创建一个新状态,而是返回现有状态。...多个useState 调用示例 让咱们更详细地看看这是如何实现,第一次渲染: React 创建组件,它还没有调用函数。React 创建元数据对象和Hooks数组

1.3K10

亲手打造属于你 React Hooks

然而,不想使用第三方库,而是想用自己自定义 React 钩子重新创建这个功能。...在例子中,将使用它与一个复制按钮组件,接收我们代码片段代码。 要做到这一点,我们需要做就是向按钮添加一个onclick。并在返回一个名为handle函数,将被请求代码复制为文本。...我们需要删除添加滚动事件监听器,这样就不会尝试更新不再存在状态变量。 我们可以通过从useEffect和window返回一个函数来实现这一点。...当浏览器大小改变,我们可以更新一块状态(用useState创建),我们将其称为windowSize,更新setter将是setWindowSize。...但当我着眼于移动平台发现所有内容都是不合适,并且都是破碎追踪这个问题到一个名为react-device-detect库,用它来检测用户是否有移动设备。如果是,将删除标题。

10.1K60

使用 useState 需要注意 5 个问题

初始化 useState 错误 错误地初始化 useState hook 是开发人员在使用它最常犯错误之一。问题useState 允许你使用任何你想要东西来定义初始状态。...但是,直接更新状态是一种不好做法,在处理多个用户使用实时应用程序时可能会导致潜在错误。为什么?因为与你所想相反,React 不会在单击按钮立即更新状态。...更新特定对象属性 另一个常见错误是只修改对象数组属性而不修改引用本身。 例如,我们用定义好 name 和 age 属性初始化一个用户对象。...然而,更新特定属性、对象数组理想而现代方法是使用 ES6 扩展操作符(...)。在处理功能组件中状态,这是更新对象数组特定属性理想方法。...,以反映每当用户输入内容表单中更改。

4.9K20

30分钟精通React今年最劲爆新特性——React Hooks

很多人知道是一个 React 迷,当我听说 React Hooks 出来了,然后在官网看了之后,觉得无比激动,每一个 React 一次更新,让人热血澎湃,这也是喜欢 react 原因之一,增加了...我们用class来创建react组件,还有一件很麻烦事情,就是this指向问题。...Hooks' }]); 其次,useState接收初始值没有规定一定要是string/number/boolean这种简单数据类型,完全可以接收对象或者数组作为参数。...在这个例子里,我们副作用是调用browser API来修改文档标题。当react要渲染我们组件,它会先记住我们用到副作用。等react更新了DOM之后,再依次执行我们定义副作用函数。...`document.title`这一句 当我们第二个参数传一个空数组[],其实就相当于只在首次渲染时候执行。

1.8K20

对于React Hook思考探索

顺便也重拾起了荒废已久js,js经过这几年更新已经变得像一门新语言了,还支持了class这个语法,让我们熟悉面向对象开发的人更容易上手。...当然了,因此能力也十分有限,函数组件没有状态,大部分业务逻辑需要跟生命周期打交道,还是需要通过类来写组件,管理生命周期跟状态,哪怕只是个很小组件。...但是紧接着,我们又发现,当我们想多调用几次useState来管理多个状态总在往同一个全局变量上写值,所有的useState方法都在操作同一个value!这肯定不是我们想要结果。...当我们再次选中复选框,我们能修改姓了。但是奇怪事发生了,名值跑到姓那儿去了。 ?...,但是我们全局数组不会变,导致姓去取了名状态。

1.3K10

React系列-轻松学会Hooks

为什么使用 开发中我们会经常遇到,当我们一个函数组件想要有自己维护state时候,不得已只能转换成class useState 出现是 :useState 是允许你在 React数组件中添加...useState返回更新state函数与class 组件 this.setState不同,它不会把新 state 和旧 state 进行合并,而是直接替换,相当于直接返回一个新对象,所以这也是闭包陷阱产生原因之一...,在函数式编程教材中,如下行为是称之为副作用 修改一个变量 修改一个对象字段值 抛出异常 在控制台显示信息、从控制台接收输入 在屏幕上显示(GUI) 读写文件、网络、数据库。...shouldComponentUpdate:你可以用 React.memo 包裹一个组件来对 props 进行浅比较。来模拟是否更新组件。...如何使用 把内联回调函数及依赖项数组作为参数传入 useCallback,它将返回该回调函数 memoized 版本,该回调函数仅在某个依赖项改变才会更新

4.3K20

React】945- 你真的用对 useEffect 了吗?

在函数组件主体内(这里指在 React 渲染阶段)改变 DOM、添加订阅、设置定时器、记录日志以及执行其他包含副作用操作都是不被允许,因为这可能会产生莫名其妙 bug 并破坏 UI 一致性。...如果包含变量数组为空,则在更新组件useEffect不会再执行,因为它不会监听任何变量变更。 再看这个例子: 业务场景:需要在页面一开始得到一个接口返回值,取调用另一个接口。...4.1 响应更新 很多情况下,我们需要响应用户输入,然后再请求。...请记住:只有某个变量更新后,需要重新执行useEffect情况,才需要将该变量添加到useEffect依赖数组中。...中一种很常见问题是:如果在组件中发送一个请求,在请求还没有返回时候卸载了组件,这个时候还会尝试设置这个状态,会报错。

9.6K20

React Ref 使用总结

在组件重新渲染,返回 ref 对象在组件整个生命周期内保持不变。变更 ref 对象 .current 属性不会引发组件重新渲染。...当然,如果给 useCallback 数组添加 uRef.current,让监听其变化,那还是会更新,但不应这么做。这就失去了 ref 意义。...不要在 Hook 组件(或者函数组件)中使用 createRef,没有 Hook 功能,函数组件每次重渲染,createRef 就会生成新 ref 对象。...使用 useRef useRef 除了访问 DOM 节点外,useRef 还可以有别的用处,你可以把看作类组件中声明实例属性,属性可以存储一些内容,内容改变不会触发视图更新。...而非受控组件就像是运行在 React 体系之外表单元素,当用户将数据输入到表单字段(例如 input,dropdown 等)React 不需要做任何事情就可以映射更新信息,非受控组件可能就要手动操作

6.9K40

React核心 -- React-Hooks

存在意义 hooks 之间状态是独立,有自己独立上下文,不会出现混淆状态情况 让函数有了状态管理 解决了 组件树不直观、类组件难维护、逻辑不易复用问题 避免函数重复执行副作用...应用场景 利用 hooks 取代生命周期函数 让组件有了状态 组件辅助函数 处理发送请求 存取数据 做好性能优化 hooks API 从 react 中引入 1. useState 给函数组添加状态...初始化以及更新组件状态 const [count, setCount] = React.useState(0) 接收一个参数作为初始值,返回一个数组:第一个是状态变量,第二个是修改变量函数 2. useEffect...,依赖列表,只有依赖更新时候才会更新内容 第一个参数返回值,返回一个函数,在 useEffect 执行之前,都会先执行里面返回函数 一般用于添加销毁事件,这样就能保证只添加一个 React.useEffect...:长久保存数据 注意事项: 返回一个子元素索引,这个索引在整个生命周期中保持不变 对象发生改变,不通知,属性变更不重新渲染 保存一个值,在整个生命周期中维持不变 重新赋值 ref.current 不会触发重新渲染

1.3K10

React核心 -- React-Hooks

存在意义 hooks 之间状态是独立,有自己独立上下文,不会出现混淆状态情况 让函数有了状态管理 解决了 组件树不直观、类组件难维护、逻辑不易复用问题 避免函数重复执行副作用...应用场景 利用 hooks 取代生命周期函数 让组件有了状态 组件辅助函数 处理发送请求 存取数据 做好性能优化 hooks API 从 react 中引入 1. useState 给函数组添加状态...初始化以及更新组件状态 const [count, setCount] = React.useState(0) 接收一个参数作为初始值,返回一个数组:第一个是状态变量,第二个是修改变量函数 2. useEffect...,依赖列表,只有依赖更新时候才会更新内容 第一个参数返回值,返回一个函数,在 useEffect 执行之前,都会先执行里面返回函数 一般用于添加销毁事件,这样就能保证只添加一个 React.useEffect...:长久保存数据 注意事项: 返回一个子元素索引,这个索引在整个生命周期中保持不变 对象发生改变,不通知,属性变更不重新渲染 保存一个值,在整个生命周期中维持不变 重新赋值 ref.current 不会触发重新渲染

1.2K20

react hooks 全攻略

React Hooks 目的是解决这些问题提供了一种简洁方式来在函数组件中定义和复用状态逻辑,以及处理副作用。通过使用 Hooks,我们可以更自由地编写组件,而不需要使用类组件繁琐结构。...这就意味着我们无法在函数组件中创建一个持久存在变量。 这时候就可以使用 useRef 来解决这个问题。useRef 可以用于在函数组件中存储和访问可变数据,这些数据不会触发组件重新渲染。...# useRef 实现原理 useRef 实现原理其实很简单。在每次函数组件执行时,返回一个持久化引用对象。这个对象有一个 current 属性,可以用来存储和读取值。...当我们修改这个 current 属性,组件重新渲染不会受到影响。...这使得我们能够直接操作 DOM,例如修改元素样式、调用 DOM API 等。值得注意是,useRef 返回引用对象在组件整个生命周期中保持不变,即使重新渲染不会变化。

37540

React 设计模式 0x0:典型反例和最佳实践

但是,当我们需要在组件树中传递函数,我们就会遇到问题。这是因为,当我们在组件树中传递函数,我们需要将函数传递给每个组件,这会导致组件树变得非常深。...App; # 在遍历中不使用 key 当我们想要向用户呈现列表,通常使用 map 方法循环遍历列表或数组,并将其显示给用户。...但是,这是一个反模式,React 无法识别哪个项目是添加/删除/重新排序,因为索引是根据数组中项目的顺序在每次渲染给出。虽然通常可以正确渲染,但仍然有一些情况会导致失败。...# 直接修改 State 当我们想要更新 state ,我们可以直接修改 state,但这是一个反模式,因为它会导致组件重新渲染。我们应该使用 setState 方法来更新 state。...这个计算不会在每次渲染都执行。接受两个参数,即箭头函数和依赖数组。依赖数组是可选,但如果传递了参数,则仅当参数发生更改时,函数才会再次运行,并返回结果值。

1K10

React Hook技术实战篇

提供处理副作用函数(数据订阅, 更新dom等), 也能够自定义Hook Api, 使得开发起来具有灵活性, 更多Api可以点击详情 使用React Hook获取数据 import React, { useState...这里初始data为空数组, 目前还没有人为设置数据. import React, { useState, useEffect } from 'react'; import { Form, Input...axios获取远程mock数据, 并且使用setData更新页面.但是在运行程序时候, 会出现一个问题即会发送两次请求,使用useEffect发送请求,相当于在componentDidMount和componentDidUpdate...如果包含变量数组为空,则在更新组件挂钩不会运行,因为它不必监视任何变量.更多关于Effect Hook详情,点击此处 手动触发Hook 此时, 组件安装成功后会获取数据, 现在, 我们希望可以有个点击按钮可以触发...自定义Hook 当我们想在两个函数之间共享逻辑,我们会把提取到第三个函数中, 用于可复用组件函数. ... const useFetchData = () => { const [search

4.3K80

快速上手 React Hook

Hook 是一个特殊函数,它可以让你“钩入” React 特性。例如,useState 是允许你在 React数组件中添加 state Hook。稍后我们将学习其他 Hook。...3.1 无需清除 effect 有时候,我们只想「在 React 更新 DOM 之后运行一些额外代码。「比如」发送网络请求」,手动变更 DOM,「记录日志」,这些都是常见无需清除操作。...当渲染,如果 count 更新成了 6,React 将会把前一次渲染数组 [5] 和这次渲染数组 [6] 中元素进行对比。这次因为 5 !...对象唯一区别是,useRef 会在每次渲染返回同一个 ref 对象。...「提取自定义 Hook」 当我们想在两个函数之间共享逻辑,我们会把提取到第三个函数中。而组件和 Hook 都是函数,所以也同样适用这种方式。

5K20

第七篇:React-Hooks 设计动机与工作模式(下)

在此基础上,我们将重新理解“Why React-Hooks”这个问题。在课时最后,将结合自身开发体验,和你分享当下这个阶段,所认识到 Hooks 局限性。...当我们在函数组件中调用 React.useState 时候,实际上是给这个组件关联了一个状态,注意,是“一个状态”而不是“一批状态”,这一点是相对于类组件中 state 来说。..."cuicui", "yisi"] } 这个对象是“包容万物”:整个组件状态都在 state 对象内部做收敛,当我们需要某个具体状态时候,会通过 this.state.xxx 这样访问对象属性形式来读取...setLength] = useState(100); // 定义为字符串 const [text, setText] = useState("初始文本") 你还可以定义为布尔值、对象等,都是没问题。...若数组不为空,那么 React 就会在新一次渲染后去对比前后两次渲染,查看数组内是否有变量发生了更新,只要有一个数组元素变了,就会被认为更新发生了,并在有更新前提下去触发 useEffect 中定义副作用逻辑

83510

深入了解 useMemo 和 useCallback

这可能会导致性能问题,比如 UI 在用户执行操作后更新不够快。 而 useMemo 和 useCallback 是用来帮助我们优化重渲染工具。...这意味着应该只在props改变重新渲染。然而,每当用户更改其名称,Boxes 也会重新呈现。 为什么我们 React.memo() 没有保护我们?...我们确实有一个影响boxes 数组 boxWidth 状态变量,但我们没有更改问题在于:每次 React 重新渲染,我们都会生成一个全新数组。它们在值上是相等,但在参照物上是不同。...当我们渲染,我们调用那个函数: // 每次渲染这个组件,我们调用这个函数… function App() { // 最后创造了一个全新数组 const boxes = [ { flex...5.2 在 context 提供者 当我们在具有 context 应用程序之间共享数据,通常会传递一个大对象作为 value 属性。

8.8K30
领券