javascript - react 错误: Cannot read property 'users' of undefined

标签 javascript reactjs

我正在尝试运行此代码(从某些来源获取),其中动态创建输入并在提交时记录值。 我收到此错误:

Cannot read property 'users' of undefined while calling createUI.

有人可以帮我吗?

import React, { useState } from "react";
import ReactDOM from "react-dom";

export default function App() {
  const [state, setState] = useState({
    users: [{ firstName: "", lastName: "" }]
  });

  const addClick = () => {
    setState(prevState => {
      users: [...prevState.users, { firstName: "", lastName: "" }];
    });
  };
  const createUI = () => {
    state.users.map((el, i) => {
      return (
        <div key={i}>
          <input
            placeholder="First Name"
            name="firstName"
            value={el.firstName || ""}
            onChange={handleChange}
          />
          <input
            placeholder="Last Name"
            name="lastName"
            value={el.lastName || ""}
            onChange={handleChange}
          />
          <input type="button" value="remove" onClick={removeClick} />
        </div>
      );
    });
  };

  const handleChange = (i, e) => {
    const { name, value } = e.target;
    let users = [...state.users];
    users[i] = { ...users[i], [name]: value };
    setState({ users });
  };

  const removeClick = i => {
    let users = [...state.users];
    users.splice(i, 1);
    setState({ users });
  };

  const handleSubmit = event => {
    alert("A name was submitted: " + JSON.stringify(this.state.users));
    event.preventDefault();
  };
  return (
    <form onSubmit={handleSubmit}>
      {createUI()}
      <input type="button" value="add more" onClick={addClick()} />
      <input type="submit" value="Submit" />
    </form>
  );
}

ReactDOM.render(<App />, document.getElementById("root"));

// const rootElement = document.getElementById("root");
// ReactDOM.render(<App />, rootElement)

此处为沙箱 -> https://codesandbox.io/s/dynamic-fields-23cw4?fontsize=14&hidenavigation=1&theme=dark

最佳答案

该错误的原因如下行:

<input type="button" value="add more" onClick={addClick()} />

从技术上讲,您正在调用 addClick 函数,该函数会更改 state 对象的值。工作正常的解决方案如下:

<input type="button" value="add more" onClick={() => addClick()} />

或更短的方式:

<input type="button" value="add more" onClick={addClick} />

希望对您有所帮助!

关于javascript - react 错误: Cannot read property 'users' of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59272755/

相关文章:

javascript - 在 react 中获取总是返回(JSON 中位置 0 处的意外标记 R)

javascript - 小数点太多 + 网站上看不到样式

javascript - 仅当代码在 3 秒内未执行时才执行 block

javascript - 如何将数组写入的字符串转换为真正的数组?

javascript - 使用 JavaScript 指定 FlashGet 下载命令的文件类型

django - 为什么使用 nginx 服务的网站没有应用样式

javascript - 将js数组分为2个部分

javascript - 如何根据数据属性定位选择选项?

javascript - 如何自动更新我的 javascript 文件以导入新检测到的文件?

javascript - reactjs render() 在 promise 解决后未触发 this.setState 被重新分配