typescript - 为什么函数在 vue 3 设置 block 中立即执行

标签 typescript vue.js vuejs3

我在 vue 3 中定义了一个函数,如下所示:

setup(props) {
    
    const { getters } = useStore();

    const add = () => {
      alert("dd");
    };

    return (
      add
    );
  }

并在模板中调用它,如下所示:

<button type="button" class="translate-pop-button" @click="()=>add">
        <span class="reddwarf-btn-icon"></span>
      </button>

现在我发现setup函数add在组件创建时执行。为什么add函数立即执行?如何避免它自动执行?我尝试像这样编写函数调用:

@click="()=>add"

好像没用。这是我安装组件的代码:

export async function addTransShowElement(translation:string){
  let anchorElementId = "uniq-anchor-point";
  let anchorElement = document.getElementById(anchorElementId);
  if (anchorElement == null || anchorElement === undefined) {
    let reddwarfTranslateDiv = document.createElement("div");
    reddwarfTranslateDiv.id = anchorElementId;
    document.body.appendChild(reddwarfTranslateDiv);
  }
  let appElement = document.getElementById("reddwarf-translate-app");
  if (appElement == null || appElement === undefined) {
    let props = {
      word: translation.toString().trim(),
    };
    const app = createApp(TranslatorPop, props);
    app.use(store);
    let vm = app.mount("#uniq-anchor-point");
    document.body.appendChild(vm.$el);
  }
}

最佳答案

尝试像在代码片段中返回对象而不是函数一样:

const App = {
  setup() {
    const add = () =>  alert("dd");
    return {   //👈 you was calling it here with ()
      add
    };
  }
}
Vue.createApp(App)
  .mount('#app')
  
<script src="https://unpkg.com/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="ceb8bbab8efde0fce0fcf7" rel="noreferrer noopener nofollow">[email protected]</a>/dist/vue.global.prod.js"></script>
<div id="app">
  <button type="button" class="translate-pop-button" @click="add">
    <span class="reddwarf-btn-icon">click</span>
  </button>
</div>

关于typescript - 为什么函数在 vue 3 设置 block 中立即执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70984105/

相关文章:

javascript - 当父组件更新 vuejs 时,子组件不会更新

typescript - 有什么方法可以在 typescript 中声明嵌套类结构吗?

javascript - 如何在 Cypress 中执行自定义命令?

laravel - Vue js $vm0 未定义

vue.js - 使用任何功能之前, Uncaught Error : [vue-composition-api] must call Vue. use(plugin)

javascript - Vue 3 + typescript : type check props in single file component

javascript - Vue3在js文件中使用全局变量

typescript - 获取 BootstrapVue 下拉列表(b-dropdown)以在单击按钮时显示

javascript - Chrome 下载 PDF 而不是显示

javascript - 我的 Vue Hello World 示例显示双括号且未呈现文本