微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用功能组件提升状态

如何解决使用功能组件提升状态

我正在尝试将 AddTodo.js 中的输入状态提升到我的 App.js。

我收到下一个错误:“TypeError:无法读取未定义的属性 'preventDefault'”。

我尝试了很多变体,但在网上查看只会让我更加困惑(我确实设法从子函数调用函数,但我似乎无法将输入数据传递给 onAddHandler)

感谢帮助!

App.js:

import React,{ useState } from "react";
import Header from "./UI/Header";
import TodoList from "./Components/TodoList";
import AddTodo from "./Components/AddTodo";

function App(props) {
  const [todo,setTodo] = useState([]);

  const onAddHandler = (input,e) => {
    e.preventDefault();
    setTodo([
      ...todo,{
        name: input,},]);
    console.log(input);
  };

  return (
    <div>
      <div className="App">
        <AddTodo onAddHandler={onAddHandler} />
        <Header />
        <TodoList />
      </div>
    </div>
  );
}

export default App;

AddTodo.js :

import React,{ useState } from "react";

const AddUser = ({ onAddHandler }) => {
  const [input,setInput] = useState("");

  const inputChangeHandler = (e) => {
    setInput(e.target.value);
  };

  return (
    <div>
      <form onSubmit={onAddHandler(input)}>
        <input id="todoname" type="text" onChange={inputChangeHandler}></input>
        <button type="submit">Submit</button>
      </form>
    </div>
  );
};

export default AddUser;

解决方法

您应该为按钮提交添加对 onClick 事件的回调:

import React,{ useState } from "react";

const AddUser = ({ onAddHandler }) => {
  const [input,setInput] = useState("");

  const inputChangeHandler = (e) => {
    setInput(e.target.value);
  };

  return (
    <div>
      <form onSubmit={onAddHandler(input)}>
        <input id="todoname" type="text" onChange={inputChangeHandler}></input> //change this line
        <button type="submit" onClick={(e) => onAddHandler(input,e)}>Submit</button>
      </form>
    </div>
  );
};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。