vue3源码地址:https://github.com/vuejs/vue-next
98%代码由Typescript编写,期待100%TS
vue3和vue2得区别
性能更比vue2.0强 Performance
打包更科学不在打包没用到得模块
更友好得支持兼容Ts
为什么要学习TS
- 按需输出javascript版本
- 代码标准化利于团队开发
- 主流框架及最新特性的支持
- 便于重构和主流IDE支持
- 更多友好特性和检测
vue3代码demo
<template>
<button @click="increment">
Count is: {{ state.count }}, double is: {{ state.double }}
</button>
</template>
<script>
import { reactive, computed } from 'vue'
export default {
setup() {
const state = reactive({
count: 0,
double: computed(() => state.count * 2),
})
function increment() {
state.count++
}
return {
state,
increment,
}
},
}
</script>
生命周期钩子函数
import { onMounted } from 'vue'
export default {
setup() {
onMounted(() => {
console.log('component is mounted!')
})
},
}
生命周期只能用在setup钩子中,他会通过内部状态自动找到调用此setup钩子的实例。这样设计是为了减少将逻辑提取到外部函数试的冲突
setup()函数现在只是简单地作为调用所有组合函数的入口
export default {
setup() {
// 网络状态
const { networkState } = useNetworkState()
// 文件夹状态
const { folders, currentFolderData } = useCurrentFolderData(networkState)
const folderNavigation = useFolderNavigation({
networkState,
currentFolderData,
})
const { favoriteFolders, toggleFavorite } = useFavoriteFolders(
currentFolderData
)
const { showHiddenFolders } = useHiddenFolders()
const createFolder = useCreateFolder(folderNavigation.openFolder)
// 当前工作目录
resetCwdOnLeave()
const { updateOnCwdChanged } = useCwdUtils()
// 实用工具
const { slicePath } = usePathUtils()
return {
networkState,
folders,
currentFolderData,
folderNavigation,
favoriteFolders,
toggleFavorite,
showHiddenFolders,
createFolder,
updateOnCwdChanged,
slicePath,
}
},
}
setup()读起来像是在口述这个组件在做什么?
逻辑提取与复用方便
import { ref, onMounted, onUnmounted } from 'vue'
export function useMousePosition() {
const x = ref(0)
const y = ref(0)
function update(e) {
x.value = e.pageX
y.value = e.pageY
}
onMounted(() => {
window.addEventListener('mousemove', update)
})
onUnmounted(() => {
window.removeEventListener('mousemove', update)
})
return { x, y }
}
import { useMousePosition } from './mouse'
export default {
setup() {
const { x, y } = useMousePosition()
// 其他逻辑...
return { x, y }
},
}