【发布时间】:2020-09-28 22:44:56
【问题描述】:
我正在重构一个 MERN 应用程序以使用钩子和上下文,因此我将类组件更改为函数。一个组件有一个表单,它根据输入字段中的击键改变状态,例如:
class CreateAccountComp extends Component {
constructor(props) {
super(props);
this.state = {
firstName: null,
lastName: null,
email: null,
password: null,
githubID: null,
};
}
handleSubmit = (e) => {
e.preventDefault();
this.props.handleInputChange();
API.getsync(this.state.githubID, this.state.firstName, this.state.lastName, this.state.email);
...
})
};
handleChange = (e) => {
e.preventDefault();
const { name, value } = e.target;
...
this.setState({ [name]: value }, () => null);
};
....
在将回调添加到 'this.setState' 语句后,此方法有效。
新组件如下所示:
const CreateAccountComp = (props) => {
const [state, setState] = useState({
firstName: null,
lastName: null,
email: null,
password: null,
githubID: null,
});
const handleSubmit = (e) => {
e.preventDefault();
console.log("HMMMM leaving CreateAccountcomp");
props.handleInputChange();
API.getsync(state.githubID, state.firstName, state.lastName, state.email);
...
};
const handleChange = (e) => {
e.preventDefault();
const { name, value } = e.target;
...
setState({ [name]: value });
};
现在,我不能使用回调来处理异步setState 语句,并且传递给API.getsync() 函数的状态属性是未定义的。
我的研究提出了使用 async/await 或 useEffect 的示例,但它们都处理对外部 api 的单个调用。在这里,我运行handleChange 以将击键呈现到表单中的输入字段中,然后通过onSubmit 运行handleSubmit 以执行基于状态值更新数据库的函数。有没有办法在这个函数组件中正确更新状态?
【问题讨论】:
标签: javascript reactjs react-hooks