После отправки формы входа в систему я получаю свои ошибки от API для каждого конкретного случая и отображаю их под правильными данными.
Проблема заключается в том, был ли вход успешным или нет после отправки, состояния ввода инициализируются, отображаются ошибки, но каждый раз, когда пользователь должен возвращаться ко всем входам и пополнять их снова и снова, что очень раздражает.
Я новичок в реагировании, и я действительно застрял в этом.
Вот где я сейчас.
Фрагмент моего класса входа в систему:
class Login extends Component {
constructor(props) {
super(props);
this.state = {
email: "",
password: "",
isLoggedIn: false,
user: {}
};
this.onChange = this.onChange.bind(this);
this.login = this.login.bind(this);
}
login(e) {
e.preventDefault();
this.props.login(this.state.email, this.state.password);
}
onChange(e) {
this.setState({ [e.target.name]: e.target.value });
}
Пример моего ввода:
<div className="form-group centerErrs">
<input
type="text"
value={this.state.email}
onChange={this.onChange}
className="form-control form-control-user"
placeholder="Username or Email Address"
autoComplete="off"
id="email-input"
name="email"
/>
{this.props.errors ? (
<small className="form-text red">
{this.props.errors.email}
</small>
) : null}
</div>
Фрагмент моей функции входа в систему:
var formData = new FormData();
formData.append("email", email);
formData.append("password", password);
//posting to the api
.then(json => {
if (json.data.success) {
//handling the user data
let appState = {
isLoggedIn: true,
user: userData
};
// save app state with user date in local storage
localStorage["appState"] = JSON.stringify(appState);
this.setState({
isLoggedIn: appState.isLoggedIn,
user: appState.user
});
//updated : here how i handle in fail case
else {
let appState = {
isLoggedIn: false,
errors: json.data
};
this.setState({
isLoggedIn: appState.isLoggedIn,
errors: appState.errors
});
}
Обновление: это мой конструктор родительского компонента:
constructor(props) {
super(props);
this.state = {
isLoggedIn: false,
user: {},
errors: {},
};
this.login = this.login.bind(this);
}
Обновление контейнера входа в систему:
const LoginContainer = () => (
<div>
{!this.state.isLoggedIn ? (
<Login login={this.login} errors={this.state.errors} />
) : (
<Redirect to="/" />
)}
</div>
);
И рендер в родительском:
<Route exact path="/(login)" component={LoginContainer} />
Я просто хочу сохранить состояние входных данных, если отправка формы не удалась.
Буду признателен за любую помощь и заранее благодарю.