您可以只处理 http 请求并将响应设置为状态。
const RegisterForm = () => {
const [account, setAccount] = useRecoilState(accountState);
const handleSubmit = async e => {
e.preventDefault();
const response = await fetch(url, {
method: 'POST',
body: data,
});
const responseJson = await response.json();
setAccount(responseJson);
};
return (
<form onSubmit={handleSubmit}>
<input type="text" name="username" />
<button type="submit">Register</button>
</form>
);
}
编辑
为了有一个可重用的方法,我建议为频繁使用构建自定义钩子
const useRegister = () => {
const setAccount = useSetRecoilState(accountState);
const register = useCallback(async (username)=> {
const response = await fetch(url, {
method: 'POST',
body: { username },
});
const responseJson = await response.json();
setAccount(responseJson);
}, [setAccount]);
return register;
}
const RegisterForm = () => {
const register = useRegister();
const handleSubmit = async e => {
e.preventDefault();
await register(username);
};
return (
<form onSubmit={handleSubmit}>
<input type="text" name="username" />
<button type="submit">Register</button>
</form>
);
}