Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
程序yang
unidocs-zh
提交
19f54750
U
unidocs-zh
项目概览
程序yang
/
unidocs-zh
与 Fork 源项目一致
Fork自
DCloud / unidocs-zh
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
unidocs-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
19f54750
编写于
4月 08, 2022
作者:
D
DCloud_LXH
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
chore: vue3 pinia
上级
2ce07342
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
141 addition
and
0 deletion
+141
-0
docs/tutorial/_sidebar.md
docs/tutorial/_sidebar.md
+1
-0
docs/tutorial/vue3-pinia.md
docs/tutorial/vue3-pinia.md
+140
-0
未找到文件。
docs/tutorial/_sidebar.md
浏览文件 @
19f54750
...
...
@@ -20,6 +20,7 @@
*
[
组件
](
/tutorial/vue3-components.md
)
*
[
API
](
/tutorial/vue3-api.md
)
*
[
vuex
](
/tutorial/vue3-vuex.md
)
*
[
pinia
](
/tutorial/vue3-pinia.md
)
*
[
vue2 升 3 指南
](
/tutorial/migration-to-vue3.md
)
*
[
ts/typescript 专题
](
/tutorial/typescript-subject.md
)
*
编译器(条件编译)
...
...
docs/tutorial/vue3-pinia.md
0 → 100644
浏览文件 @
19f54750
# 状态管理 Pinia
## 介绍
> uni-app 内置了 [Pinia](https://pinia.vuejs.org/) 。
### Pinia 是什么?
Pinia(发音为
`/piːnjʌ/`
,如英语中的
`peenya`
) 是 Vue 的存储库,它允许您跨组件、页面共享状态。在服务器端以及小型单页应用程序中,您也可以从使用 Pinia 中获得很多好处:
-
开发工具支持
-
跟踪动作、突变的时间表
-
存储出现在使用它们的组件中
-
时间旅行和更容易的调试
-
热模块更换
-
修改您的存储而不重载您的页面
-
在开发过程中保持任何现有状态
-
为 JS 用户提供适当的 TypeScript 支持或自动完成功能
-
插件: 通过插件扩展 Pinia 功能
-
服务器端渲染支持
### 项目结构
```
├── pages
├── static
└── stores
├── counter.js
├── App.vue
├── main.js
├── manifest.json
├── pages.json
└── uni.scss
```
### 基本示例
在
`main.js`
中编写以下代码:
```
js
import
{
createSSRApp
}
from
'
vue
'
;
import
*
as
Pinia
from
'
pinia
'
;
export
function
createApp
()
{
const
app
=
createSSRApp
(
App
);
app
.
use
(
Pinia
.
createPinia
());
return
{
app
,
Pinia
,
};
}
```
首先创建一个商店:
```
js
// stores/counter.js
import
{
defineStore
}
from
'
pinia
'
;
export
const
useCounterStore
=
defineStore
(
'
counter
'
,
{
state
:
()
=>
{
return
{
count
:
0
};
},
// 也可以这样定义
// state: () => ({ count: 0 })
actions
:
{
increment
()
{
this
.
count
++
;
},
},
});
```
然后在组件中使用它:
```
js
import
{
useCounterStore
}
from
'
@/stores/counter
'
;
export
default
{
setup
()
{
const
counter
=
useCounterStore
();
counter
.
count
++
;
// 可以手动触发
counter
.
$patch
({
count
:
counter
.
count
+
1
});
// 或者使用 actions
counter
.
increment
();
},
};
```
你甚至可以使用一个函数(类似于一个组件 setup())来为更高级的用例定义一个 Store:
```
js
export
const
useCounterStore
=
defineStore
(
'
counter
'
,
()
=>
{
const
count
=
ref
(
0
);
function
increment
()
{
count
.
value
++
;
}
return
{
count
,
increment
};
});
```
如果您仍然不熟悉
`setup() Composition API`
,请不要担心,Pinia 还支持一组类似 Vuex 的
`map helpers`
。
您以相同的方式定义存储,然后使用
`mapStores()`
、
`mapState()`
或
`mapActions()`
访问:
```
js
const
useCounterStore
=
defineStore
(
'
counter
'
,
{
state
:
()
=>
({
count
:
0
}),
getters
:
{
double
:
(
state
)
=>
state
.
count
*
2
,
},
actions
:
{
increment
()
{
this
.
count
++
}
}
})
const
useUserStore
=
defineStore
(
'
user
'
,
{
// ...
})
export
default
{
computed
:
{
// 其他的计算属性
// ...
// 通过 this.counterStore 和 this.userStore 访问
...
mapStores
(
useCounterStore
,
useUserStore
)
// 通过 this.count 和 this.double 访问
...
mapState
(
useCounterStore
,
[
'
count
'
,
'
double
'
]),
},
methods
:
{
// 通过 this.increment() 访问
...
mapActions
(
useCounterStore
,
[
'
increment
'
]),
},
}
```
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录