请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

vuex ts补全,命名空间无法补全

图片描述
这个state补全,只能补全最上层上面的state属性,如果要补全命名空间下的属性就无法做到,甚至还会提示没有这个属性的报错,

正在回答

1回答

1. 一般组件上 不直接用state来获取数据,因为 state是响应式的Proxy数据,早期很笨的做法就是把所有模块的state数据全部集中堆到最外层的state中,当项目变大时,这会造成模块管理混乱不堪。

 2. 我们提供 getter 的目的就是 让 页面避免直接store.state 来获取属性,getter很好的规避了state响应式数取值不方便的问题, 把state 数据封装到getter中,然后再从getter来取值,记住:使用 Vue3 避免直接 在组件上 store.state 来调用,,因为 state是响应式的Proxy数据

0 回复 有任何疑惑可以回复我~
  • 提问者 小鹏友的小弟 #1
    我用vue3试了一下,发现getter获取出来的也是Proxy数据呀,getter获取出来跟直接state获取出来,它们有什么实质性的区别吗
    回复 有任何疑惑可以回复我~ 2021-10-27 09:48:46
  • keviny79 回复 提问者 小鹏友的小弟 #2
    尽管取出来都是Proxy数据,但你上面不是说在组件里自动推导命名空间下的属性吗?按照我的12-6 所讲, 对getter底层 改造后 可以实现自动推导出来方法来获取state数据, 而state 数据是封装在 getter方法内部,所以你就可以不用管state的推导问题啦 ,区别相对比较复杂一些,我总结下
      1.   改造 state 推导是很不方便的 【但是千万不要都直接堆到最外层的state来解决这个问题,这样会导致项目变大时,管理会异常混乱】,而改造 getter 实现推导 想对来说 方便一些
      2.  底层 把 所有 模块的 state 都自动根据命名空间 挂载到了store的state上, 并且形成了响应式state,  但是是层级父子对象, 而 getter 是根据 路径/子模块的方式来加载方法的,模块路径平行,可以根据路径一下找到对应的getter方法!
    回复 有任何疑惑可以回复我~ 2021-10-27 14:09:06
  • 提问者 小鹏友的小弟 回复 keviny79 #3
    明白了,感谢
    回复 有任何疑惑可以回复我~ 2021-10-27 19:34:51
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信