javascript - 如何将状态从一个组件转移到另一个组件?

标签 javascript reactjs object react-hooks state

我有一个将姓名、年龄和性别作为用户输入的表单。单击提交按钮后,我想将表单的状态传输到 App.js,我可以在其中将状态添加到包含用户的数组中。如何将状态从 Form.js 转移到 App.js

//Form.js

export const Form = ({ onClick }) => {
  const [form, setForm] = useState({
    name: "william",
    age: 31,
    gender: "male",
  });
  return <div><input type="submit" onClick={onClick}/></div>;
};

//App.js

export const App = () => {
  const [users, setUsers] = useState({
    name: "Anna",
    age: 24,
    gender: "female",
  });

  function addUser(e) {
    e.preventDefault();
  }
  return (
    <div>
      <Form onClick={addUser} />
    </div>
  );
};

最佳答案

您需要将一个函数向下传递给将新用户作为参数的表单组件:

//Form.js
import React, { useState } from 'react';

export const Form = ({ onClick }) => {
  const [form, setForm] = useState({
    name: "william",
    age: 31,
    gender: "male",
  });
  return <div>
    <input type="submit" onClick={() => onClick(form)}/>
  </div>;
};

//App.js

export const App = () => {
  const [users, setUsers] = useState([{
    name: "Anna",
    age: 24,
    gender: "female",
  }]);

  function addUser(newUser) {
    setUsers([...users, newUser]);

  }
  return (
    <div>
      <Form onClick={(newUser) => addUser(newUser)} />
    </div>
  );
};

在您的 onClick 中调用该函数并传入新用户。此 addUser 函数将您在 App 状态下已有的用户分散到一个新数组中,然后将新用户添加到其中。请注意,您需要一个数组来跟踪多个用户 - 之前您只是一个对象。

希望这是有道理的!

关于javascript - 如何将状态从一个组件转移到另一个组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66768837/

相关文章:

javascript - 使用 Snap SVG 和 JSON 对象数组绘制线条

javascript - Mockjax 不拦截异步表单提交

javascript - 可以访问 ng-repeat 创建的范围项吗?

javascript - ReactJS:使用react router dom转到HTML中的 anchor 链接

javascript - 如何在axios get方法头中设置用户名和密码

javascript - 在 Bigcommerce 中创建 JS 对象

c# - 我如何在 ASP.NET 中使用 jQuery 使我的 Div 可拖动

javascript - 为什么 React 的 useCallback 没有使用 ref 进行优化?

javascript - 在对象中按名称查找嵌套属性的最佳方法

c++ - 数组、对象、类来组织具有多项选择和真/假问题的测试问卷程序