0
点赞
收藏
分享

微信扫一扫

了解vue3

悲催博士僧 2021-09-24 阅读 63
随笔

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 }
  },
}
举报

相关推荐

0 条评论