【发布时间】:2019-02-02 23:25:42
【问题描述】:
我正在学习 React,我的项目中安装了 Eslint。它开始给我像
这样的错误Use callback in setState when referencing the previous state. (react/no-access-state-in-setstate)
Must use destructuring state assignment (react/destructuring-assignment)
我试着查了一下,但无法正确理解。
有人能指出我正确的方向吗?
这是我抛出错误的代码:
class LoginForm extends React.Component {
state = {
data: {
email: "",
password: "",
},
loading: false,
errors: {},
};
onChange = e =>
this.setState({
data: { ...this.state.data, [e.target.name]: e.target.value },
});
onSubmit = () => {
const errors = this.validate(this.state.data);
this.setState({ errors });
if (Object.keys(errors).length === 0) {
this.setState({ loading: true });
this.props
.submit(this.state.data)
.catch(err =>
this.setState({
errors: err.response.data.errors,
loading: false,
}),
);
}
};
}
据我了解,我需要解构 this.state 和 this.props 但如何?
编辑: 在遵循以下建议后,我最终得到了这个。我现在需要解决的只是道具。它要求我使用解构道具分配。
onChange = ({ target: { name, value } }) =>
this.setState(prevState => ({
data: { ...prevState.data, [name]: value }
}));
onSubmit = () => {
const { data } = this.state;
const errors = this.validate(data);
this.setState({ errors });
if (Object.keys(errors).length === 0) {
this.setState({ loading: true });
this.props
.submit(data)
.catch(err =>
this.setState({ errors: err.response.data.errors, loading: false })
);
}
};
在此先感谢,对于新手的问题,我们深表歉意。
【问题讨论】:
-
setState是异步的。因此,如果您致电setState并使用之前的状态,您可能会使用错误的状态!所以使用回调来获取前一个并以安全的方式使用它。 This 可能会有所帮助 -
谢谢!我去看看。
-
嘿,redux 中的
...state是什么意思。如何在 redux 中解构
标签: javascript reactjs eslint destructuring