小程序-判断是否登录公用组件

javascript 复制代码
import type { FC, PropsWithChildren, ReactElement } from 'react';
import React, { useMemo } from 'react';
import Taro from '@tarojs/taro';

import useLoginState from '@/hooks/useLoginState';

interface WithSignInComponentProps extends PropsWithChildren {
  children: ReactElement;
  ignoreAuth?: boolean; // 是否强制忽略验证登录
  redirect?: string;
}

const WithSignInComponent: FC<WithSignInComponentProps> = ({
  children,
  ignoreAuth = false, // 是否强制忽略验证登录
  redirect // 跳转地址
}) => {
  const [, , action] = useLoginState();

  const eventRef = useMemo(() => children?.props?.onClick, [children?.props?.onClick]);

  const handleClick = async (e: Event) => {
    e.stopPropagation();
    try {
      const cookies = await action?.get();
      //本项目是存储的cookies,使用hooks----useLoginState能获取到
      const isLogin = !!(cookies && cookies?.length > 0);
      // 登陆判断
      if (ignoreAuth) {
        eventRef?.(e);
        return;
      }

      if (!isLogin) {
        await Taro.navigateTo({
          url: `登录的路由${
            redirect ? `?redirect=${encodeURIComponent(redirect)}` : ''
          }`
        });

        return;
      }
      eventRef?.(e);
    } catch {}
  };
  // @ts-ignore
  return React.cloneElement(children, { onClick: handleClick });
};

export default WithSignInComponent;

使用方式:

javascript 复制代码
//组件引用,放在了公共组件components下
import WithSignInComponent from '@/components/WithSignInComponent';
<WithSignInComponent>
	<div>测试登录</div>
</WithSignInComponent>
相关推荐
sheji34166 小时前
【开题答辩全过程】以 基于微信小程序的少儿编程学习平台为例,包含答辩的问题和答案
学习·微信小程序·小程序
const_qiu8 小时前
微信小程序自动化测试100%通过率实践
微信小程序·小程序
Greg_Zhong11 小时前
小程序中登出/切换/重置页面状态的使用
小程序
一字白首12 小时前
微信小程序进阶实战:从 UI 组件库到全局状态管理全解DAY05
ui·微信小程序·小程序
土土哥V_araolin1 天前
双迪大健康新零售系统开发要点
小程序·个人开发·零售
2501_915909061 天前
不用越狱就看不到 iOS App 内部文件?使用 Keymob 查看和导出应用数据目录
android·ios·小程序·https·uni-app·iphone·webview
CHU7290351 天前
扭蛋机盲盒小程序前端功能设计及核心玩法介绍
前端·小程序
职豚求职小程序1 天前
中华财险笔试测评题库小程序刷题职豚2026新
小程序
阿珊和她的猫1 天前
小程序双线程架构:逻辑层与视图层的协同运作机制
小程序·架构
源码ym7k资源1 天前
在线家政系统(APP+小程序)源码:为您提供专业的本地服务
小程序