前段时间尤大在b站进行了vue.js 3.0 Bate的直播
下面这篇文章就配合示例来分析,带大家一起看一下vue3.0具体都发生了哪些改变
如有不全错误之处,还请大家多多指教包涵,下方留言或私信我及时改正,谢谢~
那么我们就开始吧~
vue3.0的优越之处
下面我们来看一些具体的代码
第一部分 Composition API 3.0 【optionsAPI 2.0】
creatApp({
setup:() {
//3.0当中将会使用state,页面中你将几乎不会看到this的出现
const state = reactive({
todos:storage.get(),
input:'',
visibility:'all'
})
function addTodo () {
//state 在方法中的使用
const text = state.input && state.input.trim()
...
}
watchEffect( () => { //页面监听
storage.set(state.todos)
})
onMounted(() => { //页面加载
addTodo()
})
onUnmounted(() => { //页面卸载
...
})
function onHashChange() {
...
}
function removeTodo(todo) {
...
}
return { //setup函数,最后返回一个对象,用于全页面使用
state,
addTodo
}
}
})
示例一:控制显示隐藏
// 2.0写法
creatApp({
data: () => ({
show:false
}),
methods: {
toggle () {
this.show = !this.show
}
}
})
// 3.0写法
setup () { //使用
const { on, toggle } = useToogle(false)
return { on, toggle }
}
import { ref } from 'vue'
//ref 是把普通的值包装成一个对象,对象传递是引用传递
const useToggle = (initialState = false) => {
const on = ref(initialState)
const toggle = value => {
on.value = typeof value === 'undefined' ? !on.value : value
}
return { on, togge }
}
示例二:多组件中都需要用到同一个数据查询
//使用
const user = useUsers()
import { ref, onMounted } from 'vue'
const useUsers = (query) => {
const users = ref([])
onMounted(async () => {
this.users = await UserService.fetch(query)
})
return { users }
}
示例三:获取窗口大小的函数
import { ref, onMounted, onUnmounted } from 'vue'
const useWindowSize = () => {
const width = ref(window.innerWidth)
const height = ref(window.innerHeight)
const update = e => {
width.value = window.innerWidth
height.value = window.innerHeight
}
onMounted(() => window.addEventListenner('resize', update))
onUnmounted(() => window.removeEventListener('resize', update))
return { width, height }
}
下面一段代码复制粘贴到你的html文件中,就可以体验一下vue3.0 啦
记得开F12(^U^)ノ~YO
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://s1.zhuanstatic.com/common/js/vue-next-3.0.0-alpha.0.js"></script>
</head>
<body>
<div id='app'></div>
</body>
<script>
const { createApp, reactive, computed, effect } = Vue;
const Demo = {
template: `
`,
setup() {
const state = reactive({
name: 'Shier',
time: '1',
learnTime: computed(() => state.time * 1)
})
effect(() => {
console.log(`触发effect,毕业${state.time}年了`)
})
function testFun() {
state.time++
}
return {
state,
testFun
}
}
}
createApp().mount(Demo, '#app')
</script>
</html>
感谢阅览,如有问题请及时留言私信我~