【发布时间】:2021-10-22 21:06:27
【问题描述】:
如果我像这样使用常规 setup() 方法,我可以在 Vue 3 中使用组合 API 来实现这一点:
<script>
import { useStore } from 'vuex'
import { computed } from 'vue'
export default {
const store = useStore()
setup () {
const loginStatus = computed(() => store.getters.loginStatus)
return { loginStatus }
}
}
</script>
loginStatus 现在暴露在模板中,可以在 html 中使用。
但是当我尝试更新的 <script setup> 语法时,不会再拾取 const 并将其暴露给模板。
我不应该从script setup 返回任何东西,但它也不会自动发生。 Eslint 将loginStatus 标记为未使用。我找不到任何关于在这种情况下应该如何使用 Vuex 的信息:
<script setup>
import { useStore } from 'vuex'
import { computed } from 'vue'
const store = useStore()
const loginStatus = computed(() => store.getters.loginStatus)
</script>
这预计 不会 起作用吗?或者你知道推荐的做法吗?
编辑 1:
我知道this answer 不推荐接受的解决方案组合 API 语法,第二个答案涉及编写自行创建的样板,这使我想做的事情成为可能,但似乎不像官方方式(如果有的话)。
编辑 2:
正如评论者所指出的,我的代码确实有效。然而,我被 Vetur 扩展所愚弄,将那些未返回的变量标记为未使用。所以在我看来,这就是它没有在模板中被选中的原因。实际上,一个不相关的错误才是真正的原因。
由于这个 Vetur 问题,我现在将坚持使用旧的设置语法。
【问题讨论】:
-
您的
<script setup>应该是work。如果它不适合您,请分享问题的重现。 -
你是对的,它确实有效。但是 Vetur 愚弄了我,它将未返回的变量显示为未使用,所以在我看来这就是它没有在模板中被选中的原因。但真正的原因是一个无关的错误。由于这个 Vetur 问题,我现在将坚持使用旧的设置语法。
-
尝试使用vuex扩展marketplace.visualstudio.com/…