vue3 +松果体:如何使React性成为商店的一个价值

gdx19jrr  于 2023-01-21  发布在  Vue.js
关注(0)|答案(2)|浏览(156)

我使用的是vue 3和API和pinia组合
我有一个身份验证存储,正在从存储中阅读默认电子邮件和默认密码

import { useAuthStore } from "stores/auth";
const authStore = useAuthStore();

const email = authStore.loginUser;
const password = authStore.passwordUser;

然后我使用的电子邮件和密码为v-model
问题是两者都不是被动的,如果我改变文本输入的值,模型不会更新
我恳请你对这个问题作出解释并提出解决办法。

ia2d9nvy

ia2d9nvy1#

const email = authStore.loginUser

创建一个当前值为authStore.loginUseremail常量,失去React性。要保持React性,可以使用computed

import { computed } from 'vue'
// ...

const email = computed({
  get() { return authStore.loginUser },
  set(val) { authStore.loginUser = val }
})

...或者您可以使用提供的storeToRefs Package 器,该 Package 器设计用于提取/解构商店React性 prop ,同时保持它们的React性(基本上避免了上述样板文件):

import { storeToRefs } from 'pinia'
// ...

const { 
  loginUser: email,
  passwordUser: password
} = storeToRefs(authStore) 
// email & password are now reactive

重要信息:您只需要使用storeToRefs来解构stategetters。操作应该直接从存储对象(在您的示例中为authStore)使用,或者在没有 Package 器的情况下进行解构:

const { actionOne, actionTwo } = authStore

这在上面链接的文档中有详细说明:

  • ......因此方法和非React性完全被忽略。*

总而言之,您通常会从每个商店得到两个解构:

import { useSomeStore } from '@/store'
// reactive:
const { s1, s2, g1, g2 } = storeToRefs(useSomeStore())
// non-reactive:
const { a1, a2 } = useSomeStore()

其中s1s2state成员,g1g2getters,并且a1a2actions

aydmsdu9

aydmsdu92#

我就像

import { useAuthStore } from "stores/auth";

const authStore = useAuthStore();

const email = ref(authStore.loginUser);
const password = ref(authStore.passwordUser);
const rememberme = ref(false);

未使用无用的storeToRefs

相关问题