Странное поведение инпутов при пагинации
Почему-то при переключении на Регистрация 3-ий input "наследует" value от предыдущего состояния, то-есть по-идее у него не должно быть value, но тем не менее появляется равное Войти. Как исправить?
import React, { useState } from 'react';
function Auth() {
const [pagination, setPagination] = useState('log');
function pag() {
if (pagination === 'log') {
return (
<>
<input
type="text"
className="email"
placeholder="E-mail"
/>
<input
type="text"
className="password"
placeholder="Пароль"
/>
<input
type="button"
className="done"
value="Войти"
/> // Отсюда передается
</>
);
}
return (
<>
<input
type="text"
className="email"
placeholder="E-mail"
/>
<input
type="text"
className="password"
placeholder="Пароль"
/>
<input
type="text"
className="password password-repeat"
placeholder="Повторите пароль"
/> // Сюда
<input
type="button"
className="done"
value="Зарегестрироваться"
/>
</>
);
}
function changePag(ev) {
if (ev.target.dataset.type === 'log') {
setPagination('log');
} else {
setPagination('reg');
}
}
return (
<div className="auth_page">
<div className="pagination">
<input
type="button"
className="log"
data-type="log"
onClick={changePag}
value="Вход"
/>
<input
type="button"
className="reg"
data-type="reg"
onClick={changePag}
value="Регистрация"
/>
</div>
<div className="form">
{pag()}
</div>
</div>
);
}
export default Auth;
Ответы (1 шт):
Автор решения: Senbonzakuraa
→ Ссылка
Можно поставить value="", тебе все равно нужно будет хранить все value в state и менять всё это дело:
const [data, setData] = useState({
auth: {
login: "",
password: ""
},
reg: {
login: "",
password: "",
passwordR: ""
}
})
Еще стоит вызывать инпуты не {pag()}, а <Pag/>. Что-то типа такого, но разумеется это прост отдаленный пример
import React, { useEffect, useState } from 'react';
const AuthComponent = ({show, data}) => {
const [showAuth, setShowAuth] = useState(false)
useEffect(() => {
setShowAuth(show)
}, [show])
return (
<>
{
showAuth ?
<>
<input
type="text"
className="email"
placeholder="E-mail"
value={data.auth.login}
/>
<input
type="text"
className="password"
placeholder="Пароль"
value={data.auth.password}
/>
<input
type="button"
className="done"
value="Войти"
/>
</> :
<>
<input
type="text"
className="email"
placeholder="E-mail"
value={data.reg.password}
/>
<input
type="text"
className="password"
placeholder="Пароль"
value={data.reg.password}
/>
<input
type="text"
className="password password-repeat"
placeholder="Повторите пароль"
value={data.reg.passwordR}
/>
<input
type="button"
className="done"
value="Зарегестрироваться"
/>
</>
}
</>
)
}
function Auth() {
const [pagination, setPagination] = useState(true);
const [data, setData] = useState({
auth: {
login: "",
password: ""
},
reg: {
login: "",
password: "",
passwordR: ""
}
})
function changePag(state) {
setPagination(state)
}
return (
<div className="auth_page">
<div className="pagination">
<input
type="button"
className="log"
data-type="log"
onClick={()=>changePag(false)}
value="Регистрация"
/>
<input
type="button"
className="reg"
data-type="reg"
onClick={()=>changePag(true)}
value="Вход"
/>
</div>
<div className="form">
<AuthComponent data={data} show={pagination}/>
</div>
</div>
);
}
export default Auth;
извиняюсь за форматирование