preprocessorOptions: {
scss: {
additionalData: '$primary: #993300'
}
}
}
})
三、VueRouter 1. -setup 模式下获取路由参数
文档地址:https://router.vuejs.org/zh/guide/advanced/composition-api.html由于在 -setup模式下,没有 this可以使用,就不能直接通过 this.$router或 this.$route来获取路由参数和跳转路由 。当我们需要获取路由参数时,就可以使用 vue-router提供的 useRoute方法来获取,使用如下:
// A.vue
< setup lang="ts">
import { ref, onMounted } from 'vue';
import router from "@/router";
import { useRoute } from 'vue-router'
let detailId = ref<string>('');
onMounted( => {
const route = useRoute;
detailId.value = https://www.isolves.com/it/cxkf/qd/2022-08-16/route.params.id as string; // 获取参数
})
</>
如果要做路由跳转,就可以使用 useRouter方法的返回值去跳转:
constrouter = useRouter;
router.push({
name: 'search',
query: { /**/},
})
四、Pinia 1. store 解构的变量修改后没有更新
文档地址:https://pinia.vuejs.org/core-concepts/#using-the-store当我们解构出 store 的变量后,再修改 store 上该变量的值,视图没有更新:
// A.vue
< setup lang="ts">
import componentStore from "@/store/component";
const componentStoreObj = componentStore;
let { name } = componentStoreObj;
const changeName = => {
componentStoreObj.name = 'hello pingan8787';
}
</>
<template>
<span @click="changeName">{{name}}</span>
</template>
这时候点击按钮触发 changeName事件后,视图上的 name并没有变化 。这是因为 store 是个 reactive 对象,当进行解构后,会破坏它的响应性 。所以我们不能直接进行解构 。这种情况就可以使用 Pinia 提供 storeToRefs工具方法,使用起来也很简单,只需要将需要解构的对象通过 storeToRefs方法包裹,其他逻辑不变:
// A.vue
< setup lang="ts">
import componentStore from "@/store/component";
import { storeToRefs } from 'pinia';
const componentStoreObj = componentStore;
let { name } = storeToRefs(componentStoreObj); // 使用 storeToRefs 包裹
const changeName = => {
componentStoreObj.name = 'hello pingan8787';
}
</>
<template>
<span @click="changeName">{{name}}</span>
</template>
这样再修改其值,变更马上更新视图了 。
2. Pinia 修改数据状态的方式
按照官网给的方案,目前有三种方式修改:
- 通过 store.属性名赋值修改单笔数据的状态;
constchangeName = => {
componentStoreObj.name = 'hello pingan8787';
}
- 通过 $patch方法修改多笔数据的状态;
文档地址:https://pinia.vuejs.org/api/interfaces/pinia._StoreWithState.html#patch当我们需要同时修改多笔数据的状态时,如果还是按照上面方法,可能要这么写:
constchangeName = => {
componentStoreObj.name = 'hello pingan8787'
componentStoreObj.age = '18'
componentStoreObj.addr = 'xiamen'
}
上面这么写也没什么问题,但是 Pinia 官网已经说明,使用 $patch的效率会更高,性能更好,所以在修改多笔数据时,更推荐使用 $patch,使用方式也很简单:
constchangeName = => {
// 参数类型1:对象
componentStoreObj.$patch({
name: 'hello pingan8787',
age: '18',
addr: 'xiamen',
})
// 参数类型2:方法,该方法接收 store 中的 state 作为参数
componentStoreObj.$patch( state=> {
state.name = 'hello pingan8787';
state.age = '18';
state.addr = 'xiamen';
})
}
- 通过 action方法修改多笔数据的状态;
// store.ts
import{ defineStore } from'pinia';
exportdefaultdefineStore({
id: 'testStore',
state: => {
return{
name: 'pingan8787',
age: '10',
推荐阅读
- 配音|余生,做一个能扛事的成年人
- 穿衣搭配|毛阿敏审美挺个性,戴发带混搭健美裤,变健美女孩太有朝气像30岁
- 幼儿园园长年终个人工作总结 幼儿园园长述职报告
- 鲜枣和干枣哪个好
- 清蒸素菜做法大全家常
- 香奈儿|一个半月,马思纯减掉20斤,潘玮柏减掉26斤,明星减肥为何很容易
- 壮族三月三的风俗习惯有哪些? 三月三是哪个民族的节日
- 四大洋中面积最小的是哪个 四大洋面积最小的是哪一个
- 火爆腰花的做法
- |逆向思维:不要再努力的学习和工作,这是一个天大的错误
