useDid hook 是一個方便的實用程式,可輕鬆地從 session.user 物件中提取和使用特定的 DID 相關資訊。它簡化了使用者物件的解析過程,無需手動處理即可獲取永久 DID、錢包資訊和已連接帳戶等常用資料。
此 hook 應在 SessionProvider 的子元件中使用,以確保它能存取 session 上下文。
如何使用
若要使用此 hook,請將其與 useSession 一起匯入。呼叫 useSession 以取得目前的 session 狀態,然後將 session 物件傳遞給 useDid。
Basic Usage
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) — 從useSessionhook 取得的 session 物件。只有當session.user存在時,此 hook 才會計算資料。- user
object— 成功登入後由 session 上下文提供的使用者物件。
- user
- session
傳回值
此 hook 會傳回一個狀態物件,其中包含各種衍生的 DID 資訊。每當 session.user 物件變更時,此物件都會更新。
- did
string— 使用者的永久 DID。這是permanentDid的別名。 - wallet
object— 提供者為 'wallet' 的已連接帳戶物件。如果沒有連接錢包,則傳回undefined。- did
string— 錢包帳戶的 DID。 - provider
string— 提供者名稱,此處為 'wallet'。
- did
- walletDid
string— 使用者已連接錢包的 DID。如果沒有連接錢包,則傳回undefined。 - permanentDid
string— 使用者的永久 DID,即來自user.did的主要識別碼。 - connectedDids
string[]— 一個包含使用者所有已連接帳戶 DID 的陣列。 - connectedAccounts
object[]— 完整的已連接帳戶物件陣列。- did
string— 已連接帳戶的 DID。 - provider
string— 帳戶的提供者(例如 'wallet'、'github')。
- did
- sourceProvider
string— 使用者最初用於登入的提供者(例如 'wallet'、'github')。預設為 'wallet'。 - sourceProviders
string[]— 一個包含使用者所有已連接帳戶提供者名稱的陣列。
獨立的輔助函數
useDid hook 建立在一組匯出的輔助函數之上。如果您不需要 hook 的響應式狀態管理,而只想從使用者物件中提取特定資訊,可以直接匯入並使用這些函數。
| Function | Description |
|---|---|
getPermanentDid(user) | 從使用者物件中提取永久 DID。 |
getWalletDid(user) | 提取已連接錢包的 DID。 |
getConnectedAccounts(user) | 擷取已連接帳戶的陣列。 |
getConnectedDids(user) | 擷取一個包含所有已連接帳戶 DID 的陣列。 |
getSourceProvider(user) | 取得用於初始登入的提供者。 |
getSourceProviders(user) | 取得一個包含所有已連接提供者名稱的陣列。 |
getWallet(user) | 尋找並傳回完整的錢包帳戶物件。 |
範例:使用輔助函數
Direct Function Usage
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);
}
}