vue3 基础学习
学习一下vue3基础
- 变量定义
- 方法定义
- watch
- computed
- 生命周期
- 组件
export default {
setup () {
const pageTitle = '页面名称'
let sex = 0
const username = ref('Justplay')
const changeUsername = name => {
userName.value = name
}
const userInfoObj = reactive({ username, desc: '自我介绍'})
const changeUserInfoObj = obj => {
userInfoObj.username = obj.username
userInfoObj.desc = obj.desc
}
const userImgs = ref([])
const stop = watchEffect(() => {
console.log(username.value, sex)
})
stop()
count count = ref(0)
const plusAdd = computed(() => {
return count.value ++
})
onMounted(() => {
console.log('onMounted')
})
onUpdated(() => {
console.log('onUpdated')
})
onUnmounted(() => {
console.log('onUnmounted')
})
return {
pageTitle,
sex,
username,
changeUsername,
userInfoObj,
changeUserInfoObj,
plusAdd
}
}
}
组件
- 组件应该是对代码逻辑、代码结构的拆分和复用
- 好的组件应该平衡代码逻辑、代码结构
- 组件应尽量独立,并最好遵循vue数据流单向的原则。
- 数据从父组件流到子组件,而后逻辑的处理和展示都在子组件中完成
- 需要返回父组件结果的,也尽量将数据处理逻辑在组件中处理,父组件只做简单的数据接收
- 如果一个页面做了大量的组件后页面的逻辑还是很复杂,那说明页面组件封装/结构是有问题的
<template>
<!-- 注意:vue3中支持多个根结点了 -->
<div>parent title</div>
<div>
parent content {{ authName }}
<child-one ref="childOneRef" />
<child-two :name="authName" :age="999" @changeName="changeName" />
</div>
</template>
<script setup>
import ChildOne from 'ChildOne'
import ChildTwo from 'ChildTwo'
const authName = ref('Justplay')
const changeName = name => {
authName.value = name
}
provide('authName', authName)
const childOneRef = ref()
mounted(() => {
console.log(childOneRef.value.number)
})
</script>
<template>
<div>
child {{ authName }}
</div>
</template>
<script setup>
const authName = inject('authName', 'defaut value: authName为空时使用')
const number = 12345678
</script>
<template>
<div @click="click">
child {{ authName }}
</div>
</template>
<script setup>
const authName = inject('authName', 'defaut value: authName为空时使用')
const props = defineProps({
name: {
type: String,
default: ''
},
age: {
type: [String, Number],
default: 0
}
})
const emit = defineEmits(['changeName'])
const click = () => {
emit('changeName', 'name')
}
</script>
小tips
- 区分常量、变量、响应式、数组、对象的实际情况,不要遇见变量就ref
- 推荐响应式变量使用.value,$ref并不优雅,而且影响后期的代码阅读,特别是复杂的场景
- setup中避免使用this。访问全局变量或方法可以参考provide/inject
玫瑰花宝典