reactjs 如何检测变量是否有重定向

cyvaqqii  于 2023-08-04  发布在  React
关注(0)|答案(1)|浏览(80)

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分配为permissionsuserDetail的属性而不是重定向来返回对象。
现在在组件功能中

const { userDetail, userAction, permissions } = useLoaderData();


我的问题是:在提取userDetailpermissions后,我如何检测其中任何一个是否包含重定向对象,如果包含,则将其重定向到我从响应处理程序重定向的位置?

vtwuwzda

vtwuwzda1#

我建议返回具有dataredirect属性的对象。这些检查起来是微不足道的。如果permissionsuserDetail中的任何一个具有真实的redirect值,则返回重定向,否则返回具有打包permissionsuserDetailuserAction属性的对象。
示例如下:

const toastOptions = {
  position: toast.POSITION.TOP_RIGHT,
}

export function responseHandler(response) {
  if (response.data?.success === false) {
    toast.error(response.data.message, toastOptions);
    return { data: null };
  } else if (response.data?.success === true) {
    toast.success(response.data.message, toastOptions);
    return { data: response.data.data };
  }

  if (response.status === 401) {
    localStorage.clear();
    toast.error(response.data.message, toastOptions);
  } else {
    toast.error('Something went wrong', toastOptions);
  }

  return { redirect: '/' };
}

个字符

相关问题