pinia学习笔记

官方文档:
https://pinia.web3doc.top/introduction.html

注意点:

store 中只有三个概念
state、getters 和 actions
可以理解成 属性、计算属性、属性的操作方法
不能直接解构 store 中的属性,直接结构出来的属性,会失去响应式变化(reactive)如果使用storeToRefs(),可以从store中取出属性并保持响应式。
mapState() 映射出来的store 属性是只读的,但可以传入处理函数
mapWritableState() 映射出来的 stroe 属性是响应式的,不能传入处理函数。(数组和集合不用这种方式取出来也可以响应式,除非 直接替换整个数组: cartItems = [])
其他改变属性的方法:
store.$patch({
	counter: store.counter + 1,
  name: 'Abalam',
})
store.$patch((state)=>{
	state.items.push({ name: 'shoes', quantity: 1 })
  	state.hasChanged = true
})
store.$state = {counter: 666, name:"test" }

pinia.state.value = {} // (这在 SSR for hydration 期间使用)

请注意,在执行此操作时,getter 不再缓存,它们只是您调用的函数。 但是,您可以在 getter
本身内部缓存一些结果,这并不常见,但应该证明性能更高:

export const useStore = defineStore('main', {
  getters: {
    getActiveUserById(state) {
     // activeUsers 会缓存在 返回函数 中,不会重复计算,性能更高
      const activeUsers = state.users.filter((user) => user.active)
      return (userId) => activeUsers.find((user) => user.id === userId)
    },
  },
})

store 中也有 watch --> $subscribe

pinia 插件 , pinia 可以导入插件并挂载在所有store实例上

你可能感兴趣的:(javascript,vue.js)