关于setup函数封装之后调用

来源:6-7 使用 Composition API 开发TodoList(2)

墨语迟

2021-02-24

const listRelativeEffect = () => {
    const { reactive } = Vue;
    const list = reactive([]);
    const addItemToList = (item) => {
      list.push(item);
    }
    return { list, addItemToList }
  }

  // 关于 inputValue 操作的内容进行了封装
  const inputRelativeEffect = () => {
    const { ref } = Vue;
    const inputValue = ref('');
    const handleInputValueChange = (e) => {
      inputValue.value = e.target.value
    }
    return { inputValue, handleInputValueChange}
  }

  const app = Vue.createApp({
    setup() {
      // 流程调度中转
      const { list, addItemToList } = listRelativeEffect();
      const { inputValue, handleInputValueChange} = inputRelativeEffect();
      return {
        list, addItemToList,
        inputValue, handleInputValueChange
      }
    },
    template: `
      <div>
        <div>
          <input :value="inputValue" @input="handleInputValueChange" />
          <button @click="() => addItemToList(inputValue)">提交</button>
        </div>
        <ul>
          <li v-for="(item, index) in list" :key="index">{{item}}</li>
        </ul>
      </div>
    `,
  });

老师,请问<button @click="() => addItemToList(inputValue)">为什么要用剪头函数来调用addItemToList呢?既然setup函数return了addItemToList,那么为什么不能直接调用,一定要在外面包装一层函数再调用呢?

写回答

1回答

墨语迟

提问者

2021-02-24

我意思是,为什么不能直接<button @click="addItemToList(inputValue)">调用,一定要用另外一个函数调用,才能实现addItemToList的传参呢?

0
1
Dell
不行,必须要箭头函数,你这么写,实际上绑定的是函数执行的结果,而不是一个函数
2021-02-25
共1条回复

Vue3入门与项目实战 掌握完整知识体系

明星讲师DELL亲授,全方位知识点+高匹配度项目,入门到深度掌握

3382 学习 · 1454 问题

查看课程