React Router Dom V6
我有两个加载器功能,发送请求到服务器
async function loadUserDetail(userId, userAction) {
const token = getAuthToken();
const userResponse = await axios({
url: API.endpoint + '/user/user-detail/' + userId,
params: {},
headers: {
'Content-Type': 'application/json',
Authorization: token,
},
validateStatus: () => true,
});
return responseHandler(userResponse);
}
async function getAllPermissions() {
const token = getAuthToken();
const permissionsResponse = await axios({
url: API.endpoint + '/permission/permission-dropdown',
headers: {
'Content-Type': 'application/json',
Authorization: token,
},
validateStatus: () => true,
});
return responseHandler(permissionsResponse);
}
字符串
我有一个响应处理程序,我从其中管理所有的加载器和动作响应。
响应处理程序
export function responseHandler(response) {
if (response?.data?.success === false) {
toast.error(response.data.message, {
position: toast.POSITION.TOP_RIGHT,
});
return null;
}
if (response?.data?.success === true) {
toast.success(response.data.message, {
position: toast.POSITION.TOP_RIGHT,
});
return response.data.data;
}
if (response.status === 401) {
localStorage.clear();
toast.error(response.data.message, {
position: toast.POSITION.TOP_RIGHT,
});
// <Navigate to="/" />
return redirect('/');
}
toast.error('Something went wrong', {
position: toast.POSITION.TOP_RIGHT,
});
return redirect('/');
}
型
最后我有一个装载机
export async function loader({ request, params }) {
const { userId, userAction } = params;
const responseToSend = {
permissions: await getAllPermissions(),
userDetail: await loadUserDetail(userId, userAction),
userAction,
};
return responseToSend;
}
型
现在的问题是,当响应处理程序返回redirect时,loader通过将redirect object分配为permissions或userDetail的属性而不是重定向来返回对象。
现在在组件功能中
const { userDetail, userAction, permissions } = useLoaderData();
型
我的问题是:在提取userDetail
和permissions
后,我如何检测其中任何一个是否包含重定向对象,如果包含,则将其重定向到我从响应处理程序重定向的位置?
1条答案
按热度按时间vtwuwzda1#
我建议返回具有
data
或redirect
属性的对象。这些检查起来是微不足道的。如果permissions
或userDetail
中的任何一个具有真实的redirect
值,则返回重定向,否则返回具有打包permissions
、userDetail
和userAction
属性的对象。示例如下:
个字符