跳到主要内容

useDid

useDid Hook 是一个便捷的实用程序,可以轻松地从 session.user 对象中提取和使用特定的 DID 相关信息。它简化了用户对象的解析过程,无需手动处理即可获取永久 DID、钱包信息和已连接账户等常用数据。

此 Hook 应在 SessionProvider 的子组件中使用,以确保其能够访问会话上下文。

如何使用

要使用此 Hook,请将其与 useSession 一起导入。调用 useSession 获取当前会话状态,然后将 session 对象传递给 useDid

Basic Usage

javascript
import { useSession } from '@arcblock/did-connect-react';
import { useDid } from '@arcblock/did-connect-react/lib/User';

function UserProfile() {
  const { session } = useSession();
  const {
    did,
    walletDid,
    connectedDids,
    sourceProvider,
    connectedAccounts,
  } = useDid({ session });

  if (!session.user) {
    return <p>请登录以查看您的 DID 信息。</p>;
  }

  return (
    <div>
      <h2>用户 DID 信息</h2>
      <p><strong>永久 DID:</strong> {did}</p>
      <p><strong>钱包 DID:</strong> {walletDid || 'N/A'}</p>
      <p><strong>登录方法:</strong> {sourceProvider}</p>
      <h3>已连接账户 ({connectedAccounts.length})</h3>
      <ul>
        {connectedAccounts.map((account) => (
          <li key={account.did}>
            {account.provider}: {account.did}
          </li>
        ))}
      </ul>
    </div>
  );
}

参数

useDid Hook 接受一个对象作为其唯一参数。

  • options object (required)
    • session object (required) — 从 useSession Hook 获取的会话对象。只有当 session.user 存在时,该 Hook 才会计算数据。
      • user object — 成功登录后由会话上下文提供的用户对象。

返回值

该 Hook 返回一个状态对象,其中包含各种派生的 DID 信息。每当 session.user 对象发生变化时,此对象都会更新。

  • did string — 用户的永久 DID。这是 permanentDid 的别名。
  • wallet object — 提供者为 'wallet' 的已连接账户对象。如果没有连接钱包,则返回 undefined
    • did string — 钱包账户的 DID。
    • provider string — 提供者名称,即 'wallet'。
  • walletDid string — 用户已连接钱包的 DID。如果没有连接钱包,则返回 undefined
  • permanentDid string — 用户的永久 DID,即来自 user.did 的主标识符。
  • connectedDids string[] — 一个包含用户所有已连接账户 DID 的数组。
  • connectedAccounts object[] — 包含所有已连接账户对象的完整数组。
    • did string — 已连接账户的 DID。
    • provider string — 账户的提供者(例如 'wallet'、'github')。
  • sourceProvider string — 用户最初用于登录的提供者(例如 'wallet'、'github')。默认为 'wallet'。
  • sourceProviders string[] — 一个包含用户所有已连接账户提供者名称的数组。

独立的辅助函数

useDid Hook 构建在一组导出的辅助函数之上。如果您不需要 Hook 的响应式状态管理,而只想从用户对象中提取特定信息,则可以直接导入并使用这些函数。

FunctionDescription
getPermanentDid(user)从用户对象中提取永久 DID。
getWalletDid(user)提取已连接钱包的 DID。
getConnectedAccounts(user)检索已连接账户的数组。
getConnectedDids(user)从所有已连接账户中检索一个 DID 数组。
getSourceProvider(user)获取用于初始登录的提供者。
getSourceProviders(user)获取所有已连接提供者名称的数组。
getWallet(user)查找并返回完整的钱包账户对象。

示例:使用辅助函数

Direct Function Usage

javascript
import { getWalletDid } from '@arcblock/did-connect-react/lib/User/use-did';
import { useSession } from '@arcblock/did-connect-react';

// 这种方法在事件处理程序或其他非 React 函数中可能很有用
function handleUserAction() {
  const { session } = useSession();
  if (session.user) {
    const walletDid = getWalletDid(session.user);
    console.log('User Wallet DID:', walletDid);
  }
}