Nut*_*nta 1 reactjs redux redux-toolkit rtk-query
所以我正在对Blur 进行表单验证,并使用RTK 查询来调用api。我面临的问题是,在第一次 API 调用时,isSuccess即使 API 返回状态为 200,也会返回 false
const [validateUser, { data, isSuccess }] = authAPI.useValidateUserMutation();
const validateUserDetails = (name, event) => {
event.preventDefault();
if (event.target.value !== "") {
let fieldData = {
fieldName: name,
value: event.target.value,
};
validateUser(fieldData);
console.log("Is Success: ", isSuccess);
if (isSuccess && data.errors.status !== 200) {
console.log(data);
}
} else {
}
};
Run Code Online (Sandbox Code Playgroud)
即使状态是 API 状态是 200 成功也会返回 false 但现在如果我再次执行它将返回 true
有办法解决这个问题吗?
您在这里引用的变量是在执行之前isSuccess由渲染关闭创建的变量。因此,在未来的某个时刻,整个组件将重新渲染并创建一个新的闭包。在这个新的闭包中,还将有一个变量,并且该新变量将是。但那个旧变量是“过去的快照”,是闭包中永远不会改变的值。
这是一个在 React 中经常出现的概念,与 RTK 查询无关,因此您可能最好阅读闭包。validateUserisSuccesstrueisSuccess
您可以在这里执行以下操作,而不是访问闭包变量:
const validateUserDetails = async (name, event) => {
event.preventDefault();
if (event.target.value !== "") {
let fieldData = {
fieldName: name,
value: event.target.value,
};
try {
const data = await validateUser(fieldData).unwrap();
// do something with it
} catch (error) {
// do something with it
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1878 次 |
| 最近记录: |