useDid Hook 是一个便捷的实用程序,可以轻松地从 session.user 对象中提取和使用特定的 DID 相关信息。它简化了用户对象的解析过程,无需手动处理即可获取永久 DID、钱包信息和已连接账户等常用数据。
此 Hook 应在 SessionProvider 的子组件中使用,以确保其能够访问会话上下文。
如何使用
要使用此 Hook,请将其与 useSession 一起导入。调用 useSession 获取当前会话状态,然后将 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.user存在时,该 Hook 才会计算数据。- user
object— 成功登录后由会话上下文提供的用户对象。
- 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('User Wallet DID:', walletDid);
}
}