VUE3 script 标准写法顺序

遵循了从元信息 → 输入 → 输出 → 内部逻辑 → 副作用 的思维流程,代码可读性最好

java 复制代码
<script setup>
// 1. 组件元信息
defineOptions({
  name: 'ComponentName',
  inheritAttrs: false,
  // ...
})

// 2. Props 定义
const props = defineProps({
  modelValue: String,
  // ...
})

// 3. Emits 定义
const emit = defineEmits(['update:modelValue', 'change'])

// 4. Expose 定义(暴露给父组件的方法/数据)
defineExpose({
  refresh,
  validate
})

// 5. 导入语句(虽然可以在顶部,但放这里更符合逻辑流)
import { ref, computed, watch, onMounted } from 'vue'

// 6. Store 相关
const appStore = useAppStore()

// 7. 路由相关
const route = useRoute()
const router = useRouter()

// 8. 响应式数据(按重要性排序)
const loading = ref(false)
const list = ref([])
const form = reactive({ name: '', age: 0 })

// 9. 计算属性
const computedData = computed(() => { /* ... */ })
const filteredList = computed(() => list.value.filter(/* ... */))

// 10. 侦听器
watch(() => props.modelValue, (newVal) => { /* ... */ })
watchEffect(() => { /* ... */ })

// 11. 生命周期钩子(按执行顺序)
onBeforeMount(() => { /* ... */ })
onMounted(() => { /* ... */ })
onBeforeUnmount(() => { /* ... */ })

// 12. 方法(按逻辑分组)
// 12.1 初始化方法
async function initData() { /* ... */ }

// 12.2 事件处理
function handleClick() { /* ... */ }
function onSubmit() { /* ... */ }

// 12.3 API 调用
async function fetchData() { /* ... */ }

// 12.4 工具方法
function validate() { /* ... */ }
function reset() { /* ... */ }
</script>
相关推荐
离歌漠6 小时前
《我用 Tauri 做了一个本地开发工具箱》
rust·typescript·vue
enjoy编程13 小时前
playwright学习-I
typescript·vue·nodejs·1024程序员节·playwright
落花看风雪3 天前
从零开始搭建后台系统(vue3+TypeScript+Vite)01
typescript·vue·js
那年那棵树7 天前
基于WebGis的人生如旅地图系统
前端·arcgis·vue·课程设计
冒险的豆子10 天前
Vue2 、Vue3 响应式对比及优劣
vue
NetX行者11 天前
用 Vite + Vue3 + UnoCSS 搭建企业级项目模板(一):基础骨架
vue·vite·unocss
java水泥工11 天前
什么是前端
java·vue·html5
mont evergreen12 天前
一封从外部世界寄来的信:二维码数据如何穿越三重门,抵达你的屏幕
electron·vue·事件
志尊宝13 天前
Vue3 零基础每日笔记(071):暗黑模式与主题切换——CSS 变量 + Element Plus 暗黑方案
前端·css·笔记·vue·html·前端开发·软件开发
怦然丶心动13 天前
用 Java 把干支历法算清楚:从节气切年到可读摘要
java·算法·vue·独立开发·spring boot / spring