【发布时间】:2019-09-14 07:38:04
【问题描述】:
提交登录表单后,我会从 Api 获取针对每个特定案例的错误,并在正确的输入下显示它们。 问题是提交后登录是否成功,输入状态正在初始化,错误正在显示,但是每次用户必须返回所有输入并一次又一次地重新填充它们,这非常烦人。
我是 React 的初学者,我真的被这个问题所困扰。 这就是我现在的位置。
我的登录类的片段:
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} />
我只想在表单提交失败时保持输入状态。
我将感谢任何形式的帮助,并提前感谢您。
【问题讨论】:
-
能否分享一下父组件sn-p和处理响应错误的代码
-
@AnasBakro 我已经更新了我的问题
-
如果您可以发布一个显示更多代码的 js fiddle 会有所帮助
-
在失败的情况下是否可以不更新isLoggedIn,因为默认是false,所以不需要更新它,你可以分享parent的渲染方法吗?
-
@AnasBakro 我再次更新了问题希望这可能会有所帮助
标签: reactjs forms react-state-management