vue中 export default 和<script setup> 区别对比

在 Vue 3 中,export default 和

  1. 基本语法差异

export default(Options API)

vue 复制代码
<script>
export default {
  data() {
    return {
      count: 0
    }
  },
  methods: {
    increment() {
      this.count++
    }
  },
  mounted() {
    console.log('组件已挂载')
  }
}
</script>
复制代码
2. 核心区别对比

特性 export default(Options API) <script setup>(Composition API)
语法 对象形式,需要包裹在对象中 直接编写代码,无需包裹
响应式 data() 返回对象 ref() 或 reactive()
方法定义 methods 对象中定义 直接定义函数
生命周期 生命周期钩子作为选项 导入并使用生命周期函数
组件注册 components 选项中注册 导入后直接使用
props 定义 props 选项 defineProps()
emit 定义 emits 选项 defineEmits()
暴露属性 默认暴露所有选项 需用 defineExpose() 显式暴露
代码组织 按选项类型分组 按逻辑功能组织

3. 详细示例对比

组件注册

```vue
<!-- export default -->
<script>
import ChildComponent from './ChildComponent.vue'

export default {
  components: {
    ChildComponent
  }
}
</script>

<!-- script setup -->
<script setup>
import ChildComponent from './ChildComponent.vue'
// 直接使用,无需注册
</script>

Props 处理

vue 复制代码
<!-- export default -->
<script>
export default {
  props: {
    title: {
      type: String,
      required: true
    }
  },
  setup(props) {
    // 在 setup 中使用
    console.log(props.title)
  }
}
</script>

<!-- script setup -->
<script setup>
const props = defineProps({
  title: {
    type: String,
    required: true
  }
})
// 直接使用 props.title
console.log(props.title)
</script>

计算属性

vue 复制代码
<!-- export default -->
<script>
export default {
  data() {
    return { count: 0 }
  },
  computed: {
    doubleCount() {
      return this.count * 2
    }
  }
}
</script>

<!-- script setup -->
<script setup>
import { ref, computed } from 'vue'

const count = ref(0)
const doubleCount = computed(() => count.value * 2)
</script>
  1. 优缺点分析

    总的来说,<script setup> 是 Vue 3 推荐的方式,提供了更现代化的开发体验,而 export default 保持了更好的向后兼容性。

相关推荐
do better myself2 小时前
php导入关键词的脚本 300条分批导入
java·服务器·前端
亮子AI2 小时前
【NestJS】为什么return不返回客户端?
前端·javascript·git·nestjs
Filotimo_2 小时前
Vue3 + Element Plus 表格复选框踩坑记录
javascript·vue.js·elementui
DEMO派2 小时前
前端如何防止接口重复请求方案解析
前端·vue.js·react.js·前端框架·angular
大风起兮云飞扬丶2 小时前
web前端缓存命中监控方案
前端·缓存
pas1362 小时前
32-mini-vue 更新element的children-双端对比 diff 算法
javascript·vue.js·算法
恋爱绝缘体12 小时前
CSS3 多媒体查询实例【1】
前端·css·css3
小二·3 小时前
Python Web 开发进阶实战:无障碍深度集成 —— 构建真正包容的 Flask + Vue 应用
前端·python·flask
niucloud-admin11 小时前
web 端前端
前端