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

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>
相关推荐
CHU72903515 小时前
生鲜团购商城小程序:新鲜触手可及的便捷购物新体验
小程序
医疗信息化王工21 小时前
钉钉小程序开发实战:手术查询小程序
小程序·钉钉·手术查询
软件开发技术1 天前
新版点微同城主题源码34.7+全套插件+小程序前后端 源文件
小程序·php
mon_star°1 天前
消防安全培训小程序项目亮点与功能清单
小程序
编程迪2 天前
基于Java和Vue开发的在线问诊系统医疗咨询小程序APP
小程序
CHU7290352 天前
知识触手可及:在线教学课堂APP的沉浸式学习体验
前端·学习·小程序
竟未曾年少轻狂2 天前
微信小程序-组件开发
微信小程序·小程序
CHU7290352 天前
在线教学课堂APP功能版块设计方案:重构学习场景的交互逻辑
java·学习·小程序·重构
焦糖玛奇朵婷2 天前
盲盒小程序开发,盲盒小程序怎么做
java·大数据·服务器·前端·小程序
CHU7290353 天前
便捷约玩,沉浸推理:线上剧本杀APP功能版块设计详解
前端·小程序