Vue3 Composition API 发出没有商店但没有商店的作品

Posted

技术标签:

【中文标题】Vue3 Composition API 发出没有商店但没有商店的作品【英文标题】:Vue3 Composition API emit works without store but not with store 【发布时间】:2022-01-18 01:10:27 【问题描述】:

我正在使用 Vue3 和组合 API。我已经建立了一个商店(不使用 VUEX)来存储全局设置。我有一个要展开或折叠的侧边栏。我首先将所有代码放在一个组件中以发送给父级以展开或折叠侧边栏,效果很好。然后我尝试重构以使用商店在视图中设置侧边栏,但在第二个版本中发出将不起作用。

不使用商店,所有代码都是组件的本地代码。它工作得很好,并向父级发出值。

//regular
import  ref  from "vue";

export default 
  name: "rightmenu",
  emits: ["showRightMenu"],
  props: ["bgcolor"],
  setup(props, context) 
    const showRightMenu = ref(true);

    function toggleRightMenu() 
      if (showRightMenu.value == false) 
        showRightMenu.value = true;
       else 
        showRightMenu.value = false;
      
      context.emit("showRightMenu", showRightMenu.value);
    

    return  showRightMenu, toggleRightMenu ;
  ,
;

下面使用store更新item和run方法。

//with store
import  ref, inject  from "vue";

export default 
  name: "rightmenu",
  emits: ["showRightMenu"],
  props: ["bgcolor"],
  setup(context) 
    const store = inject("store");

    const showRightMenu = ref(store.showRightMenu);

    function toggleRightMenu() 
      const aValue = store.methods.toggleRightMenu();
      context.emit("showRightMenu", aValue); //ISSUE
    

    return  showRightMenu, toggleRightMenu ;
  ,
;

我收到以下错误:

未捕获的类型错误:context.emit 不是函数 在 Proxy.toggleRightMenu

这是商店代码:

import  ref  from "vue";

const showRightMenu = ref(true);

const methods = 
  changeColor(val) 
    state_color.color = val.color;
    state_color.colorName = val.title;
  ,
  toggleRightMenu() 
    if (showRightMenu.value == false) 
      showRightMenu.value = true;
     else 
      showRightMenu.value = false;
    
    return showRightMenu.value
  ,
;

const getters = ;

export default 
  showRightMenu,
  methods,
  getters,
;

【问题讨论】:

【参考方案1】:

您的设置功能似乎不正确。

在第一个示例中,您使用道具作为第一个参数,但在第二个示例中没有。

setup(props, context) 有效

setup(context) 不是因为 context 参数实际上是由 props 而不是 context 填充的

【讨论】:

以上是关于Vue3 Composition API 发出没有商店但没有商店的作品的主要内容,如果未能解决你的问题,请参考以下文章

vue3.0 Composition API 上手初体验 构建 vue 基础代码

vue3.0 Composition API 上手初体验 构建 vue 基础代码

使用 nuxt-composition-api 在路由更改上重新初始化 Vue3 可组合函数

vue3常用 Composition API

vue3.0 Composition API 上手初体验 普通组件的开发与使用

vue3.0 Composition API 上手初体验 普通组件的开发与使用