Nuxt3-学习之路 17,修改useState中的状态共享值

2,635 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第22天,点击查看活动详情

Nuxt3-学习之路 17,修改useState中的状态共享值

引言

本系列会以我的一个理解,来介绍并开始学习 Nuxt3

中间会插入自己所联系到的 乱七八糟 的 知识点

问题

image.png

首先感谢这位 掘友,看到 掘友 在Nuxt3-学习之路 14,状态共享-useState提出的问题。如果想要修改 useState 里面定义的值,这里应该如何写,如何处理呢?

我看到自己对 useState 的使用,学习和讲述的比较简单。

我这里也重新回顾学习一下,并在这里进行补充,如何修改 useState 定义的值。

修改状态共享值-useState

这里主要分两种情况

  • 一种是只定义数据,然后暴露出去。然后在不同的 .vue文件 上写不同的逻辑方法,来对这个数据进行处理。

  • 另一种同时定义数据和方法,然后一起暴露出去,不同的 .vue文件 调用同一种方法名来处理。

只定义数据

我们在 composables 目录下创建文件 useModifyFoo.ts,添加两个导出方法,一个是对基本数据类型处理,另一种对引用数据类型进行处理。

export const useModifyStringFoo = () => {
  const modifyStringFoo = useState('modifyStringFoo', () => '')
  return {
    modifyStringFoo
  }
}

export const useModifyArrayFoo = () => {
  const modifyArrayFoo = useState('modifyArrayFoo', () => [])
  return {
    modifyArrayFoo
  }
}

之后我们在 components 目录下,创建两个组件,分别为 MyModify.vue,以及MyModify2.vue ,注意这两个里面的代码是一样的。

image.png

image.png

之后在根路由中进行组件的一个引入,来进行使用。

image.png

此时的页面展现为

image.png

下面进行点击测试,尝试改变 modifyStringFoomodifyArrayFoo 的值,查看是否两个组件都会进行改变。

20220424_170334.gif

通过gif图可知,我们在不同的组件中修改后,数据是共同变化的。

定义数据和方法

定义数据和方法,我们在刚刚定义的 useModifyFoo.ts 文件中,修改文件内容

export const useModifyStringFoo = () => {
  const modifyStringFoo = useState('modifyStringFoo', () => '')
  const modifyStringFooFunc = () => {
    modifyStringFoo.value += modifyStringFoo.value.length
  }
  return {
    modifyStringFoo,
    modifyStringFooFunc
  }
}

export const useModifyArrayFoo = () => {
  const modifyArrayFoo = useState('modifyArrayFoo', () => [])
  const modifyArrayFooFunc = () => {
    modifyArrayFoo.value.push(modifyArrayFoo.value.length)
  }
  return {
    modifyArrayFoo,
    modifyArrayFooFunc
  }
}

修改 MyModify.vueMyModify2.vue 这两个组件文件为下图所示,

image.png

刷新页面,得到的效果如上图 gif 效果一样。

这种方法的好处,可以在我们导出的时候,不必直接操作变量本身,直接调取方法内部,通过方法内部来控制变量。

如果想外界彻底不操作变量,就要使用方法来控制,那么可以在导出的时候,加上 readonly 关键词,如下图,来保证了我们的数据安全性。

image.png

总结

学习了 Nuxt3 中,如何修改 useState 中的状态共享值,两种方法提供使用,以及 readonly 关键词,保护变量。