reactjs onClick处理程序方法有什么区别

4si2a6ki  于 2023-06-22  发布在  React
关注(0)|答案(2)|浏览(103)

给出下面的React成分。

function App() {
    const [text, handleTextChange] = useState('Some Text');

    const handleChange = () => {
        handleTextChange('Button handler clicked');
    }       

    return (
       <>
        <span>{text}</span>
        <button onClick={handleChange}>Change Text</button>
       </>
    )
}

在上面的组件中,我们可以用两种不同的方式编写onClick处理程序

<button onClick={handleChange}>Change Text</button>

和/或

<button onClick={() => handleChange()}>Change Text</button>

哪种方法更好,为什么?

e4yzc0pl

e4yzc0pl1#

两者都可以工作,在这种情况下,两者在功能上几乎相同。
在第一个示例中,您直接将函数引用传递给onClick

<button onClick={handleChange}>Change Text</button>

在第二个示例中,将 * anonymous * 函数传递给onClick。调用时,该匿名函数将调用handleChange

<button onClick={() => handleChange()}>Change Text</button>

除非你得到了一些你不想传递给handleChange的参数,否则我建议不要像你的第二个例子那样把它 Package 在一个匿名函数中。没有任何好处。就在头顶上。

vyswwuz2

vyswwuz22#

在第二个例子中,你创建了两个函数,我们通常希望这样做,以防我们想把动态数据传递给内部函数。
比如说,
在这个例子中,我们传递了一个函数引用:

function App() {
    const handleChange = (event) => {
        // You have access to the click event object
        handleTextChange('Button handler clicked');
    }       

    return (
       <>
        <span>{text}</span>
        <button onClick={handleChange}>Change Text</button>
       </>
    )
}

但是,假设你想添加一个动态数据,例如在循环中迭代时,你想传递每个项目的索引:

function App() {
  const [text, handleTextChange] = useState('Some Text');

  const handleChange = (event, item) => {
    // we have access to both the event object and the specific item in the list
  };

  return items.map(item => {
    return (
      <div key={item}>
        <span>{text}</span>
        <button onClick={event => handleChange(event, item)}>
          Change Text
        </button>
      </div>
    );
  });
}

相关问题