reactjs 如何在React功能组件钩子中删除任务

hrysbysz  于 2023-03-29  发布在  React
关注(0)|答案(1)|浏览(93)

我正在尝试使用handleDelete功能删除任务,但有些东西引起了我的注意,我不知道为什么!每次我按下addTodos功能时,handleDelete都会自动触发,这是为什么?
我的目标是一旦我按下Map中的标签就得到id,但是对于像我这样的初学者来说,我不知道为什么一旦我按下添加按钮,handleDelete函数就会运行?
我的代码:

import { useState } from "react";
     import "./App.scss";

      function App() {
        //Value of Input
        const [val, setVal] = useState("");

      const [todos, setTodos] = useState([]);

      const addTodos = (e) => {
          e.preventDefault();
          setTodos([...todos, val]);
          setVal("");
       };

      const handleDelete = (id) => {
          console.log(id);
       };

      return (
        <div className="App">
        {/** On change values*/}
       <form onSubmit={addTodos}>
        <input
             onChange={(e) => setVal(e.target.value)}
             value={val}
             type="text"
         />
         <button type="submit">Add</button>
       </form>
       <ul>
          {todos.map((todo, key) => (
           <div key={key}>
              <li>{todo}</li>
              <a onClick={handleDelete(key)}>X</a>
           </div>
            ))}
       </ul>
      </div>
      );
      }

      export default App;

我尝试在handleDelete函数中的id内控制台日志,但控制台也是从addTodos函数触发的!

hs1rzwqc

hs1rzwqc1#

更改此内容:

onClick={handleDelete(key)}>X</a>
// handleDelete(key) gets called immediately and returns `undefined`
// this means it will delete the task immediately and try to execute
// `undefined` on the 'click' event

对此:

onClick={()=> handleDelete(key)}>X</a>
// An arrow function is passed as an event handler to the onClick event
// this means it will be executed on the 'click' event only

在第一种情况下,调用函数handleDelete并将其返回值作为事件处理程序传递。
在第二种情况下,将箭头函数表达式作为事件处理程序传递,这是正确的方式。

相关问题