Ale*_*lex 15 reactjs react-query
我有两个涉及onVerificationCodeSubmit
重置密码逻辑的 API 调用。问题是在成功回调newPasswordMutation
之前执行。setRestorePasswordToken(data.restoreToken)
verifyCodeMutation
我该如何等待呢?
我可以通过 React-Query 工具处理它吗?
const { mutateAsync: verifyCodeMutation } = useMutation(verifyCode, {
onSuccess: ({ data }) => setRestorePasswordToken(data.restoreToken),
});
const { mutateAsync: newPasswordMutation } = useMutation(createNewPassword, {
enabled: restorePasswordToken,
onSuccess: () => setPasswordResetSuccessfull(true),
});
const onRestorePasswordSubmit = ({ email }) => {
restorePasswordMutation(email);
};
const onVerificationCodeSubmit = async ({ verificationCode, password }) => {
await verifyCodeMutation({ verificationCode, restoreToken });
newPasswordMutation({ password, restorePasswordToken });
};
Run Code Online (Sandbox Code Playgroud)
TkD*_*odo 32
依赖性突变基本上可以通过三种不同的方式解决:
mutateFn
:const mutate = useMutation((data) =>
axios.post('/something', { data })
.then((somethingResult) =>
axios.put('/somethingElse', { somethingResult })
)
)
<button onClick={() => mutate('data') />
Run Code Online (Sandbox Code Playgroud)
优点是一种突变具有一种加载状态。缺点是如果需要,您无法轻松地单独触发它们。
mutateAsync
:const mutate1 = useMutation((data) => axios.post('/something', { data }))
const mutate2 = useMutation(somethingResult) => axios.put('/somethingElse', { somethingResult })
<button onClick={async () => {
try {
const somethingResult = await mutate1.muteateAsync('data')
const result = await mutate2.mutateAsync(somethingResult)
} catch {}
}} />
Run Code Online (Sandbox Code Playgroud)
有点样板,你很可能需要结合加载状态
mutate
和 回调:const mutate1 = useMutation((data) => axios.post('/something', { data }))
const mutate2 = useMutation(somethingResult) => axios.put('/somethingElse', { somethingResult })
<button onClick={() => {
mutate1.mutate('data', {
onSuccess: mutate2.mutate
})
}} />
Run Code Online (Sandbox Code Playgroud)
分开了,但仍然很简洁。如果有超过 2 个突变,就会变得混乱,并且如果需要,最终结果只能在第二个突变的 onSuccess 回调中可用
万一它会对某人有帮助:我刚刚在第一个突变中执行了第二个突变onSuccess
const { mutateAsync: verifyCodeMutation } = useMutation(verifyCode, {
onSuccess: ({ data }) => {
setRestorePasswordToken(data.restoreToken);
const password = getValues("password");
newPasswordMutation({ password, restorePasswordToken });
},
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19656 次 |
最近记录: |