gpt4 book ai didi

javascript - 使用 React Hooks 使用 RTK 查询进行链式查询/变异调用

转载 作者:行者123 更新时间:2023-12-04 07:27:58 31 4
gpt4 key购买 nike

在下面的示例中,我尝试使用 React 和 Redux Toolkit 创建一个简单的登录/身份验证组件。

const Login = () => {
const dispatch = useDispatch();
const [login, { isLoading }] = useLoginMutation();
const [loginData, setLoginData] = useState({
email: '',
password: '',
});

const loginHandler = async () => {
try {
const result = await login({
email: loginData.email,
password: loginData.password,
}).unwrap();

const { token, userId } = result;

const { data } = await dispatch(
backendApi.endpoints.getUser.initiate({ token, userId })
);

dispatch(
setCredentials({
user: {
email: data.user.email,
id: data.user.id,
name: data.user.name,
type: data.user.type,
},
token,
})
);
} catch (err) {
console.log(err);
}
};

return (
<Space>
{isLoading ? (
<SpinnerIcon />
) : (
// setLoginData and loginHandler are set and used here
// Standard React code: Input onChange -> setLoginData / Submit button onClick -> loginHandler
// (nothing special, code shortened for the sake of readability)
<FormWithEmailPasswordInputsAndButton />
)}
</Space>
);
};
这工作正常,问题是:
我想利用 isLoading getUser 上的属性(property)查询结果对象使 <SpinnerIcon />组件将是可见的,直到两个请求都完成。
照原样, spinnerIcon组件仅在 login 期间显示API 调用,因为我没有使用 React Hooks 来调用 getUser查询因此我没有 isLoading属性(property)来自 getUser可用于组件的其余部分。
但是如果我想使用 React Hooks 进行调用,我将需要来自 login 的结果事先突变。 const [getUser, { isLoading: isUserLoading }] = useGetUserQuery(resultFromLoginMutation);我不知道该怎么做。一个接一个,这样我就可以同时使用 isLoading特性。

最佳答案

您可以使用 skipTokenskip选项:


const [login, { isLoading, data: resultFromLoginMutation, isSuccess }] = useLoginMutation();
const [getUser, { isLoading: isUserLoading }] = useGetUserQuery(resultFromLoginMutation, { skip: !isSuccess });
或者
const [login, { isLoading, data: resultFromLoginMutation }] = useLoginMutation();
const [getUser, { isLoading: isUserLoading }] = useGetUserQuery(resultFromLoginMutation ?? skipToken);

关于javascript - 使用 React Hooks 使用 RTK 查询进行链式查询/变异调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68121669/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com