Почему эта функция onClick срабатывает при вводе ввода?

Я действительно запутался, потому что я учусь использовать хуки, и я работал над хуком useState, когда я наткнулся на это, функция onClick срабатывает, когда я набираю ввод.

Это код:

import React, {useState} from 'react'

function Hooks() {
  const [count, setInput] = useState("");
  return (
    <React.Fragment>
      <input value={count} onChange={(e) => {setInput(e.target.value)}}>
      </input>
      <button className="btn" value="See Input!" onClick={console.log(count)}>
          Click here!
      </button>
    </React.Fragment>
  )
}

export default Hooks

Когда я печатаю в поле ввода, счетчик регистрируется, вот как я это исправил:

import React, {useState} from 'react'

function Hooks() {

  const [count, setInput] = useState("");

  return (
    <React.Fragment>
      <input value={count} onChange={(e) => {setInput(e.target.value)}}>
      </input>

      <button className="btn" value="See Input!" onClick={() => {console.log(count)}}>
          Click here!
      </button>
    </React.Fragment>
  )
}

export default Hooks

Как видите, единственное, что изменилось, это то, что вместо записи события onClick в виде стрелочной функции я просто пишу строку кода. Я бы понял, что это не сработает, но почему это вызывается всякий раз, когда я что-то пишу на входе?

Заранее спасибо!


person Guillermo    schedule 20.07.2020    source источник
comment
setInput запускает повторный рендеринг компонента, но поскольку вы передаете console.log(count) в событии onClick, он вызывается немедленно. Передача функции стрелки — это один из способов исправить это, в качестве альтернативы вы можете добавить функцию ведения журнала к своему компоненту и передать ее в onClick.   -  person user3272018    schedule 20.07.2020


Ответы (1)


Функция onClick принимает функцию. В первом случае вы вызывали функцию, добавляя круглые скобки. Когда состояние обновлялось, возвращалось отображение, которое вызывает console.log() на onCLick.

Во втором случае вы передали определение функции и не вызываете ее.

Функция вызывается, когда пользователь нажимает на кнопку

person Sawan Patodia    schedule 20.07.2020