跳到主要內容

useDid

useDid hook 是一個方便的實用程式,可輕鬆地從 session.user 物件中提取和使用特定的 DID 相關資訊。它簡化了使用者物件的解析過程,無需手動處理即可獲取永久 DID、錢包資訊和已連接帳戶等常用資料。

此 hook 應在 SessionProvider 的子元件中使用,以確保它能存取 session 上下文。

如何使用

若要使用此 hook,請將其與 useSession 一起匯入。呼叫 useSession 以取得目前的 session 狀態,然後將 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 物件。只有當 session.user 存在時,此 hook 才會計算資料。
      • user object — 成功登入後由 session 上下文提供的使用者物件。

傳回值

此 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('使用者錢包 DID:', walletDid);
  }
}