clerk-vue-patterns
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseVue Patterns
Vue模式
SDK: v2+ (Vue 3). For Nuxt, use .
@clerk/vueclerk-nuxt-patternsSDK: v2+ (Vue 3)。如果是Nuxt项目,请使用。
@clerk/vueclerk-nuxt-patternsWhat Do You Need?
你需要什么?
| Task | Reference |
|---|---|
| Composables: useAuth, useUser, useOrganization | references/composables.md |
| Vue Router navigation guards | references/vue-router-guards.md |
| Pinia store with auth state | references/pinia-integration.md |
| 任务 | 参考 |
|---|---|
| 可组合函数:useAuth、useUser、useOrganization | references/composables.md |
| Vue Router导航守卫 | references/vue-router-guards.md |
| 包含身份验证状态的Pinia存储 | references/pinia-integration.md |
Mental Model
心智模型
Vue uses composables from :
@clerk/vue- — reactive
useAuth(),isSignedIn,userIdsignOut - — reactive
useUser()objectuser - — full Clerk instance for advanced operations
useClerk() - — reactive
useOrganization(),organizationmembership
Vue使用来自的可组合函数:
@clerk/vue- — 响应式的
useAuth()、isSignedIn、userIdsignOut - — 响应式的
useUser()对象user - — 用于高级操作的完整Clerk实例
useClerk() - — 响应式的
useOrganization()、organizationmembership
Setup
设置
Vue (Plain)
原生Vue
ts
// main.ts
import { clerkPlugin } from '@clerk/vue'
import { createApp } from 'vue'
import App from './App.vue'
const app = createApp(App)
app.use(clerkPlugin, {
publishableKey: import.meta.env.VITE_CLERK_PUBLISHABLE_KEY,
})
app.mount('#app')ts
// main.ts
import { clerkPlugin } from '@clerk/vue'
import { createApp } from 'vue'
import App from './App.vue'
const app = createApp(App)
app.use(clerkPlugin, {
publishableKey: import.meta.env.VITE_CLERK_PUBLISHABLE_KEY,
})
app.mount('#app')Composables Usage
可组合函数用法
vue
<script setup lang="ts">
import { useAuth, useUser } from '@clerk/vue'
const { isSignedIn, userId, signOut } = useAuth()
const { user } = useUser()
</script>
<template>
<div v-if="isSignedIn">
<p>Hello {{ user?.firstName }}</p>
<button @click="signOut()">Sign Out</button>
</div>
<SignInButton v-else />
</template>vue
<script setup lang="ts">
import { useAuth, useUser } from '@clerk/vue'
const { isSignedIn, userId, signOut } = useAuth()
const { user } = useUser()
</script>
<template>
<div v-if="isSignedIn">
<p>你好 {{ user?.firstName }}</p>
<button @click="signOut()">退出登录</button>
</div>
<SignInButton v-else />
</template>Org Switching
组织切换
vue
<script setup lang="ts">
import { useOrganizationList } from '@clerk/vue'
const { userMemberships, setActive } = useOrganizationList()
</script>
<template>
<button
v-for="mem in userMemberships.data ?? []"
:key="mem.organization.id"
@click="setActive({ organization: mem.organization.id })"
>
{{ mem.organization.name }}
</button>
</template>vue
<script setup lang="ts">
import { useOrganizationList } from '@clerk/vue'
const { userMemberships, setActive } = useOrganizationList()
</script>
<template>
<button
v-for="mem in userMemberships.data ?? []"
:key="mem.organization.id"
@click="setActive({ organization: mem.organization.id })"
>
{{ mem.organization.name }}
</button>
</template>Common Pitfalls
常见问题
| Symptom | Cause | Fix |
|---|---|---|
Composables return | Not inside | Ensure |
| Destructuring loses reactivity | Use |
| 现象 | 原因 | 解决方案 |
|---|---|---|
可组合函数返回 | 不在 | 确保已经调用 |
| 解构操作丢失了响应性 | 使用 |
Import Map
导入映射
| What | Import |
|---|---|
| Composables | |
| Plugin setup | |
| Components | |
| 内容 | 导入来源 |
|---|---|
| 可组合函数 | |
| 插件配置 | |
| 组件 | |
See Also
另请参阅
- - Initial Clerk install
clerk-setup - - Custom flows & appearance
clerk-custom-ui - - B2B organizations
clerk-orgs
- - Clerk初始安装
clerk-setup - - 自定义流程与外观
clerk-custom-ui - - B2B组织功能
clerk-orgs