当前位置: 首页 > 知识库问答 >
问题:

vue3+pinia使用的时候,watch疑惑?

易阳云
2024-03-22

vue3+pinia使用的时候,并没有对state赋值,watch为什么还能监听到变化?
如果不用mapState,第一次也监听不到,问题就在computedmapState,为什么会出现这种情况?

//stroreimport { defineStore } from "pinia"const useTestStore = defineStore({    id: 'testStore',    state() {        return {            obj: {                name: '张三'            }        }       },})export default useTestStore
import useTestStore from "./store"export default {  computed: {    ...mapState(useTestStore, ['obj'])  },  watch: {    obj: {      handler(newValue, oldValue) {        //这里为什么会执行?        console.log('sss', JSON.stringify(newValue), JSON.stringify(oldValue))      },      deep: true    }  },}

共有1个答案

夏侯鹏
2024-03-22

Pinia的store中的state是通过返回一个函数来初始化的,这个函数返回的对象是响应式的。当你在组件中使用watch来监听store的状态时,实际上是在监听这个响应式对象的变化。因为这个对象是响应式的,所以当它的任何属性发生变化时,Vue的响应式系统会自动触发watch的回调函数。

 类似资料:
  • 这两个地方的上下文有什么特别的吗?为什么第一种写法会报错呢。提示:

  • 引入方式 store.js main.js 这么使用正确吗? 让store = reactive({})?

  • 大佬们,由于后台返回的数据,是实时的一条数据,(每发送一条数据都是新数据而前面发送的数据就将作为旧数据)我需要将旧数据也显示出来,但是当我将旧数据和新数据赋值的时候,旧数据前面会出现null,请问如何将出现null的时候,旧数据不会被显示出来?或者说有什么其他办法不用watch监听也可以实时的收到新旧数据?

  • 问题内容: 奇怪的是: 似乎或多或少被定义为。通过这种方式很容易产生错误: 一些fname意外地以else块结尾。修复很简单,我们应该改用它,但是从表面上看,这似乎是一种不错的pythonic方式,并且比“正确”的方式更具可读性。 由于字符串是不可变的,所以为什么字符串错误是什么技术细节?什么时候进行身份检查更好,什么时候进行平等检查更好? 问题答案: 据我所知,检查对象身份是否相等。由于没有强制

  • 问题内容: 我有一个将客户发送到另一个站点来处理付款的应用程序。客户之外的另一个站点在我们的服务器上调用一个页面,让我们知道付款的状态。被调用页面会检查付款应用程序提供的参数,并检查我们是否知道该交易。然后,它更新数据库以反映状态。这一切都无需与客户进行任何互动即可完成。 我个人选择将此功能实现为JSP,因为将文件拖放到文件系统中比编译和打包文件然后将条目添加到配置文件中要容易得多。 考虑到页面的

  • 问题内容: 我怎么能说: 为什么函数调用中不需要括号,而最后一行呢? 问题答案: 是一个功能 调用该函数并产生该函数返回的任何值。 setTimeout的目的是在一段时间后运行代码。你需要的功能只是传递给它(这样的setTimeout可以自称在适当的时候函数),因为如果你将它传递给setTimeout的前调用的函数(用括号),将执行 现在 而不是1秒后,。