不使用语法糖setup

发布于 2025-02-07  576 次阅读


在Vue 3中,如果你不使用<script setup>语法,而是使用传统的<script>标签,你需要将组件的逻辑封装在一个Vue组件对象中,并通过export default导出这个对象。对于你提供的代码片段,这里是如何在不使用<script setup>的情况下改写它的:

<template>
  <!-- 你的模板代码将在这里 -->
  <div>
    <p>Count (from count ref): {{ count }}</p>
    <p>Count (from t ref): {{ t.count }}</p>
    <button @click="add">Add</button>
  </div>
</template>

<script>
import HelloWorld from './components/HelloWorld.vue';
import { ref } from 'vue';

export default {
  components: {
    HelloWorld // 注册HelloWorld组件,以便在模板中使用
  },
  setup() {
    // 注意:尽管我们在传统的<script>标签中,但我们仍然可以使用setup函数
    // 并将返回的对象用于模板。不过,通常在这种情况下,我们会直接在data、methods等选项中定义逻辑。
    // 但为了与你的原始代码保持一致,这里仍然使用setup函数。

    // 然而,如果你真的想避免使用setup函数,你应该将下面的逻辑分散到data和methods选项中。

    const count = ref(100);
    const t = ref({
      count: 1145
    });

    function add() {
      count.value++;
      t.value.count++;
      console.log(t.value.count);
    }

    // 返回给模板使用的数据和方法
    return {
      count, // 注意:在模板中,你可以直接访问count,因为Vue会自动解包ref对象
      t, // 在模板中,你需要通过t.count来访问count属性,因为t是一个对象ref
      add // 添加按钮点击事件处理函数
    };
  }
};
</script>

<!-- 如果你有样式,可以在这里添加<style>标签 -->

但是,请注意,上面的代码实际上仍然使用了setup函数,只是为了与你提供的代码保持一致。在传统的<script>标签中,更常见的做法是将状态(如countt)放在data选项中,将方法(如add)放在methods选项中。这里是如何改写以不使用setup函数的例子:

<template>
  <div>
    <p>Count (from data count): {{ count }}</p>
    <p>Count (from data t object): {{ t.count }}</p>
    <button @click="add">Add</button>
  </div>
</template>

<script>
import HelloWorld from './components/HelloWorld.vue';

export default {
  components: {
    HelloWorld
  },
  data() {
    return {
      count: 100, // 直接在data中定义count
      t: { // 直接在data中定义t对象
        count: 1145
      }
    };
  },
  methods: {
    add() {
      this.count++; // 使用this关键字访问data中的count
      this.t.count++; // 使用this关键字访问data中的t对象的count属性
      console.log(this.t.count);
    }
  }
};
</script>

在这个例子中,我们没有使用setup函数或ref,而是直接在data选项中定义了状态,并在methods选项中定义了方法。这是Vue 2和Vue 3中都支持的传统方式。

下次见面会是什么时候呢?
最后更新于 2025-02-07