firebase - 在 Vue 3 中使用 vuex
问题描述
去年我花了一些时间学习 Vue 2。我真的很喜欢这个框架,但没有推进一个项目。我现在有时间做一个项目,但我想将 Vue 3 与组合 API 一起使用。我将使用 Firebase 作为后端。我见过关于是否使用 Vuex 的相互冲突的技术。
例如,我想在全局状态下存储一个“currentUser”对象,该对象可以从应用程序中的任何组件访问。通常,它会使用 Vuex 来完成。我有一个 getter 来返回对象,一个异步操作来从 firebase 获取数据和一个突变来设置状态。
但是,我已经看到了几个根本不使用 Vuex 的 Vue 3 代码示例,而是在需要的地方(例如在导航栏组件中)执行类似这样的操作来获取/设置应用程序中的 currentUser。
可组合物/getUser.js
import { ref } from 'vue'
import firebase from 'firebase/app'
// refs
const user = ref(firebase.auth().currentUser)
// auth changes
firebase.auth().onAuthStateChanged(_user => {
console.log('User state change. Current user is:', _user)
user.value = _user
});
const getUser = () => {
return { user }
}
export default getUser
使用上面的这段代码,我可以导入 getUser.js 并使用这样的代码访问当前登录的用户。此外,用户对象现在是反应式的:
<script>
import getUser from '../composables/getUser'
export default {
setup() {
const { user } = getUser()
return { user }
}
}
</script>
看来我可以使用这些小功能直接从 db 获取数据,而无需使用 Vuex 模式,我觉得这有点复杂。
所以,我的问题是——如果我开始一个新的 Vue 3 项目,是否可以创建“可组合”函数来获取/设置数据并将它们导入我的组件而不是使用 Vuex?这种方法有什么缺点吗?还是我应该坚持使用 Vuex?
解决方案
简短的回答 - 你不需要它。
长答案 - 这取决于。
这主要取决于您的应用程序以及您在组件中使用“currentUser”数据的频率。如果它在 2 个或更多组件中,您希望多久执行一次从后端实际获取的操作?
一次在 app-init/login 上还是每次安装每个组件时?
(可能一次)
它需要反应吗?如果是,那么您可能会使用集中式数据模式、您自己的或库。考虑到这一点,使用 Vuex 可能更简单。
推荐阅读
- android - 无法将 Ionic 1 应用程序发布到具有新的 64 位支持要求的 Google Play 商店
- .net-core - 内部的 HttpResponseMessage EnsureSuccessStatusCode() 方法
- sip - Kamailio - 调度程序通过 http 确定可用性?
- angular - 角度从数据 Json 检测一天结束时间
- composer-php - 使用 Composer 和 Drupal 应用补丁时出现问题
- flutter - 如何在单个文本中包含多种字体
- mongodb - 使用鉴别器更新 mongodb 文档
- javascript - 使用 react-select 时重置值
- sed - 当想要匹配多行时,如何使用 sed 更改文本
- vue.js - 选项后的多个 v-checkbox 删除多个选择不起作用