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

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>
相关推荐
云-缩影18 小时前
做微信小程序,自建服务器还是用云托管:技术选型对比
服务器·微信小程序·小程序
超级新零售2 天前
服装订货会数字化:商品版本、订单状态与后续配发数据如何衔接?
大数据·小程序·企业微信
xiezhr2 天前
我用workBuddy开发了自己的第一个小程序并成功上线了
ai·小程序·ai agent·workbuddy
sinat_267611912 天前
用 AI 开发微信小程序(八):一个极简收纳工具的开发复盘
微信小程序·小程序
李纲明3 天前
微信小程序真机预览白屏或 request 失败:先核 request 合法域名与 TLS,再查体验版与本地缓存
缓存·微信小程序·小程序·小程序开发·devdiy·真机预览·合法域名
klfdgl3 天前
线上商城小程序投入测算,有成熟开发经验服务商的长期收益对比
小程序
一木 之林3 天前
Dify学习笔记 03 · RAG检索增强生成:三代范式、评估与落地(第40-45、55-56集)
笔记·小程序·交互·dify
赵小哥要冲啦4 天前
社区邻里互助小程序从 0 到 1 复盘:需求拆解与信任机制设计
java·小程序·需求分析
河北清兮网络科技4 天前
石家庄做一套企业知识库系统多少钱?2026 报价明细
小程序·短剧app·广告联盟
Ai-_Man4 天前
Coze扣子还是不可以导出左侧所有对话,只能点进去单条内容导出,方法不对吗?
开发语言·人工智能·ai·小程序·1024程序员节