React неожиданно вызывает функцию - PullRequest
2 голосов
/ 29 апреля 2020

Вот мой компонент Login:

const Login = () => {
    const [user, setUser] = useState("");
    const [pass, setPass] = useState("");

    return (
        <div>
            <p>Login</p>
            <input
                type="text"
                onChange={(e) => {
                    setUser(e.target.value);
                }}
            />
            <input
                type="password"
                onChange={(e) => {
                    setPass(e.target.value);
                }}
            />


            <button onClick={submit(user, pass)}>
                Submit
            </button>
        </div>
    );
};

Он отображается на моей веб-странице, но вызывает функцию submit() всякий раз, когда я ввожу эти два: текст и пароль. Глядя на мой код, я только установил onClick для вызова функции submit.

Что-то не так с моим кодом?

РЕДАКТИРОВАТЬ: Удалены classNames для удобства просмотра

Ответы [ 3 ]

3 голосов
/ 29 апреля 2020

попробуй:

const Login = () => {
    const [user, setUser] = useState("");
    const [pass, setPass] = useState("");

    const onSubmit = () => {
       submit(user,pass)
    }

    return (
        <div>
            <p>Login</p>
            <input
                type="text"
                onChange={(e) => {
                    setUser(e.target.value);
                }}
            />
            <input
                type="password"
                onChange={(e) => {
                    setPass(e.target.value);
                }}
            />


            <button onClick={onSubmit}>
                Submit
            </button>
        </div>
    );
};
1 голос
/ 29 апреля 2020

Вы вызываете функцию submit для каждого рендера. OnClick принимает функцию, но вы напрямую вызываете функцию.

<button onClick={submit(user, pass)}>
   Submit
</button>

будет заменено на

<button onClick={()=>submit(user, pass)}>
   Submit
</button>
0 голосов
/ 29 апреля 2020

onClick={()=>submit(user, pass)} и вы хороши для go.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...