因此,我尝试使用Vue组合API作为全局状态。例如,我创建了名为useLoading.js
的文件作为加载标志。
useLoading.js
import { reactive, toRefs } from '@vue/composition-api'
export default () => {
const state = reactive({
isLoading: false
})
const setIsLoading = (loading) => {
state.isLoading = loading
}
return {
...toRefs(state),
setIsLoading
}
}
然后,我创建了组件A,它将在单击按钮时调用setIsLoading
。
ComponentA.vue
<template>
<div @click="showLoading" />
</template>
<script>
import useLoading from '@/composable/useLoading'
export default {
setup () {
const { setIsLoading } = useLoading()
function showLoading () {
setIsLoading(true)
}
return {
showLoading
}
}
}
</script>
我还有组件B,当isLoading
的值为true
时,它将用于呈现true
ComponentB.vue
<template>
<div v-if="isLoading" />
</template>
<script>
import useLoading from '@/composable/useLoading'
export default {
setup () {
const { isLoading } = useLoading()
return {
isLoading: isLoading
}
}
}
</script>
然而,isLoading
在ComponentB.vue
中的值没有变化(不是反应性的)。但是,当我调用ComponentA.vue
时,值确实发生了变化。
我觉得我的实现在使用复合API作为全局状态时有问题。有人能帮忙吗?
谢谢
发布于 2021-09-16 04:30:28
更新
刚刚发现,我必须将状态排除在导出函数之外,如果我将它包含在导出函数中,如果在另一个地方调用它,它会创建其他状态。因此,状态将不会在组件之间同步。
import { reactive, toRefs } from '@vue/composition-api'
const state = reactive({
isLoading: false
})
export default () => {
const setIsLoading = (loading) => {
state.isLoading = loading
}
return {
...toRefs(state),
setIsLoading
}
}
发布于 2021-09-15 10:39:16
像这样的东西会有用的:
useLoading.js
import { reactive } from 'vue'
export const state = reactive({
isLoading: false
})
App.vue
<script setup>
import {state} from './useLoading.js';
</script>
<template>
<input v-model="state.isloading" type="checkbox" />
</template>
https://stackoverflow.com/questions/69197831
复制相似问题