我正在尝试使用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
函数触发的!
1条答案
按热度按时间hs1rzwqc1#
更改此内容:
对此:
在第一种情况下,调用函数handleDelete并将其返回值作为事件处理程序传递。
在第二种情况下,将箭头函数表达式作为事件处理程序传递,这是正确的方式。