【发布时间】:2021-05-09 09:48:51
【问题描述】:
import React, {useState} from "react";
function Todo({todo,index,removeTodo}){
return(
<div className="todo">
{todo.text}
<div>
<button onClick={() => removeTodo(index)} > Remove </button>
</div>
</div>
);
}
export default Todo;
有人可以解释为什么我需要在调用函数之前放置 () => 吗?
【问题讨论】:
-
() => { /* function code */ }是一个匿名函数,类似于写function() { /* function code */}只是匿名函数会自动绑定到创建它的作用域。这里为什么需要匿名函数是因为@987654324 @ 提供了一个 React.MouseEvent 参数,而不是removeTodo期望的索引,因此需要包装removeTodo以提供预期的参数。 -
什么是 React MouseEvent,为什么它会影响我传递给 removeTodo 的内容,索引不总是只是一个数字吗?
-
React.MouseEvent是 React 中鼠标相关事件的 Typescript 类型。按钮的onClick的类型为(event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;。它会影响removeTodo的调用方式,就好像您要拥有<button onClick={removeTodo} />然后removeTodo将收到 React.MouseEvent 而不是索引。如果您有<button onClick={removeTodo(index)} />,则removeTodo将在渲染期间执行并返回分配给onClick的函数(我假设它是未定义的)。这样您就可以将removeTodo包装在一个匿名函数中。
标签: javascript reactjs onclick arrow-functions