vue2与vue3.0对比
不包括vue3.2!
1. 获取数据
Vue2:
vue
<script>
export default {
name: 'App',
data: {
return {
name: '前端印象',
age: 22
}
},
mounted() {
console.log(this.name)
console.log(this.age)
}
}
</script>
Vue3:使用ref + return
vue
<script>
import {ref} from 'vue'
export default {
name: 'App',
setup() {
const name = ref('前端印象')
const age = ref(22)
console.log(name.value)
console.log(age.value)
return {name, age}
}
}
</script>
2. 使用方法
Vue2:
vue
<script>
export default {
name: 'App',
methods: {
show() {
console.log('show方法被调用')
}
},
mounted() {
this.show()
}
}
</script>
Vue3:在setup中定义
vue
<script>
import {onMounted} from 'vue'
export default {
name: 'App',
setup() {
function show() {
console.log('show方法被调用')
}
onMounted(() => {
show()
})
}
}
</script>
3. 获取当前组件根元素
Vue2:
vue
<template>
<div id="app" ref="root">
<p class="child"></p>
</div>
</template>
<script>
export default {
name: 'App',
mounted() {
const el = this.$refs.root
console.log(el)
}
}
</script>
Vue3:使用const root = ref(null)
vue
<template>
<div id="app" ref="root">
<p class="child"></p>
</div>
</template>
<script>
import {ref, onMounted} from 'vue'
export default {
name: 'App',
setup() {
const root = ref(null)
onMounted(() => {
console.log(root.value)
})
}
}
</script>
4. 子组件向父组件通信
Vue2:
vue
<script>
export default {
name: 'App',
methods: {
change() {
this.$emit('valueChange', 3)
}
}
}
</script>
Vue3:使用context.emit()
vue
<script>
export default {
name: 'App',
setup(props, context) {
function change() {
context.emit('valueChange', 3)
}
}
}
</script>
5. 获取Vuex对象
Vue2:
vue
<script>
export default {
name: 'App',
mounted() {
console.log(this.$store.state.name)
this.$store.commit('show')
}
}
</script>
Vue3:使用useStore()
vue
<script>
import {onMounted} from 'vue'
import {useStore} from 'vuex'
export default {
name: 'App',
setup(props, context) {
const store = useStore()
onMounted(() => {
console.log(store.name)
store.commit('show')
})
}
}
</script>