设备指纹
WEB

React

在 React 项目中接入 Geelab 设备指纹 v2 Web SDK

开始前,请先按照 JavaScript 接入指南 加载 SDK、创建公共客户端模块并配置 TypeScript 类型。本页只说明 React 特有的初始化与调用方式。

接入步骤

public/index.html 或应用 HTML 模板中加载 SDK:

<script src="./gld_v2.js"></script>

在应用入口预加载:

// src/main.jsx
import { createRoot } from 'react-dom/client';
import App from './App';
import { preloadGeeGuard } from './geeGuardClient';

preloadGeeGuard().catch(function (error) {
  console.error('GeeLabGuard 初始化失败:', error);
});

createRoot(document.getElementById('root')).render(<App />);

在业务组件获取 GeeToken:

import { useState } from 'react';
import { getGeeToken } from './geeGuardClient';

export default function CheckoutButton({ orderId }) {
  const [submitting, setSubmitting] = useState(false);
  const [error, setError] = useState('');

  async function handleCheckout() {
    setSubmitting(true);
    setError('');
    try {
      const { token, offline } = await getGeeToken();
      await fetch('/api/checkout', {
        method: 'POST',
        headers: { 'content-type': 'application/json' },
        body: JSON.stringify({ orderId, gee_token: token, offline }),
      });
    } catch (err) {
      setError(err instanceof Error ? err.message : '请求处理失败');
    } finally {
      setSubmitting(false);
    }
  }

  return (
    <>
      <button type="button" disabled={submitting} onClick={handleCheckout}>
        {submitting ? '处理中…' : '提交订单'}
      </button>
      {error && <p role="alert">{error}</p>}
    </>
  );
}

React StrictMode 在开发环境可能重复挂载组件。请缓存初始化 Promise,不要在组件 函数体或没有依赖数组的 useEffect 中直接初始化 SDK。

On this page