Я действительно запутался, потому что я учусь использовать хуки, и я работал над хуком 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 в виде стрелочной функции я просто пишу строку кода. Я бы понял, что это не сработает, но почему это вызывается всякий раз, когда я что-то пишу на входе?
Заранее спасибо!
setInput
запускает повторный рендеринг компонента, но поскольку вы передаетеconsole.log(count)
в событииonClick
, он вызывается немедленно. Передача функции стрелки — это один из способов исправить это, в качестве альтернативы вы можете добавить функцию ведения журнала к своему компоненту и передать ее вonClick
. - person user3272018   schedule 20.07.2020