我正在学习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
,但如何实现呢?编辑:根据下面的建议,我最终得到了这个结果。现在我需要解决的问题只有props了。它要求我使用析构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
并使用之前的状态,可能会使用错误的状态!因此,请使用回调函数获取之前的状态,并以安全的方式使用它。 这个链接可能会有所帮助:https://medium.com/@voonminghann/when-to-use-callback-function-of-setstate-in-react-37fff67e5a6c。 - Maor Refaeli...state
是什么意思?如何在 Redux 中进行解构操作? - Prashanth Yarram