首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >VueUse useDark()不触发计算或监视

VueUse useDark()不触发计算或监视
EN

Stack Overflow用户
提问于 2022-07-20 12:01:40
回答 2查看 261关注 0票数 0
代码语言:javascript
运行
复制
import { useDark } from '@vueuse/core';

const isDark = useDark();

watch(isDark, () => {
  console.log('dark mode changed'); // does not trigger watch
}, { deep: true })

const scheme = computed(isDark, () => {
   options: isDark.value ? 'dark' : 'light' // does not trigger update of scheme
})

</script>``

但是,像下面这样的自定义组合会触发手表的更新和计算。另外,这个vueuse库返回WritableComputedRef类型,我不知道这是否是问题所在。

代码语言:javascript
运行
复制
const isDarkMode = ref(false);

export function useDarkMode() {
  const KEY = 'dark-mode';
  isDarkMode.value = (localStorage.getItem(KEY) ?? '') === 'dark';

  function toggleDarkMode() {
    isDarkMode.value = !isDarkMode.value;

    localStorage.setItem(KEY, isDarkMode.value ? 'dark' : '');
  }

  return {
    isDarkMode,
    toggleDarkMode,
  };
}
EN

回答 2

Stack Overflow用户

发布于 2022-07-20 12:24:25

我想你需要这样使用你的手表:

代码语言:javascript
运行
复制
watch(() => isDark, (newValue) => {
  console.log(newValue);
})

关于计算,我不确定它是否能那样工作,我从来没有见过像这样初始化的计算。

应该是这样的:

代码语言:javascript
运行
复制
const state = computed(() => isDark.value ? 'dark' : 'light');
票数 0
EN

Stack Overflow用户

发布于 2022-08-08 10:37:59

我也有同样的问题,主要是因为我试图在很多地方使用它,只是我觉得没有道理。

代码语言:javascript
运行
复制
const isDark = useDark()
const toggleDark = useToggle(isDark);

watch: {
    isDark: {
      handler(val) {
        useThemeConfigStore.setTheme(val == true ? "dark" : "light");
      },
    },
  },

我只需删除其他文件,只需使用pinia或vuex来监视状态。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73051317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档