coppyC / blog

个人博客,用issue 分享,记录关于前端,js 各种经验和奇淫技巧。欢迎star, watch。
74 stars 2 forks source link

[2019-06-27] vue 3.0 前瞻: 这样的vue你还会用吗? #7

Open coppyC opened 5 years ago

coppyC commented 5 years ago

前言

最近总是看到Evan You在github上活动很多, 然后收到这个

image

之前也看过, 不过以为是vue的拓展库, 就没怎么了解

今天仔细看了一下, 发现是vue3.0 的劲爆新内容, 目前这个库是为 2.x 准备的, 等到时候 3.0 一发布,就可以无缝切换过去。不得不说, vue还真是为人民群众着想啊, 既能尝鲜, 又不会断后路。

然后又从文中顺手过去 Evan You 的知乎专栏。

https://zhuanlan.zhihu.com/p/68477600

大家可以过去看看, 我在这里说一下感受。

3.0 改动

3.0 除了一些性能提升, 使用 ts, Proxy 重写这些不太会影响 2.x 开发者开发体验的功能外, 最重要的就是引入新的钩子 setup

先来一段代码看看

import { value, computed, watch, onMounted } from 'vue'

const App = {
  template: `
    <div>
      <span>count is {{ count }}</span>
      <span>plusOne is {{ plusOne }}</span>
      <button @click="increment">count++</button>
    </div>
  `,
  setup() {
    // reactive state
    const count = value(0)
    // computed state
    const plusOne = computed(() => count.value + 1)
    // method
    const increment = () => { count.value++ }
    // watch
    watch(() => count.value * 2, val => {
      console.log(`count * 2 is ${val}`)
    })
    // lifecycle
    onMounted(() => {
      console.log(`mounted`)
    })
    // expose bindings on render context
    return {
      count,
      plusOne,
      increment
    }
  }
}

嗯, 一切还是那么熟悉, 你看这 computed,这watch,这mounted,这data,噫? 好像有点不对劲。

这data怎么变成了value? 还要用 .value 还访问,还有这mounted怎么还要加个 on,再仔细看,所有的东西都是在 setup 中,而且用起来也和 2.x 的用法相去甚远。这就是之前vue3.0偷跑消息的 「vue hooks」

vue hooks

是的,之前他们说的 vue hooks 就是这个,而为什么叫 vue hooks呢,因为这个灵感来源于 React hooks ,原话是这么说的

Function-based API 受 React Hooks 的启发,提供了一个全新的逻辑复用方案,且不存在上述问题。

可以说vue3.0首先要感谢react,react是一个开创性的框架,vue的很多灵感源于react,然后还要感谢vue的团队,vue 提供了很多react没有的特性,很方便开发者,而且 hooks 也结合了vue的特色(watch 等),并不是照搬 react

类型推导

这一块主要还是为了 typescript,vue一直在努力提升结 typescript 的支持,对typescript 的支持无非就是提升 typescript 时的代码提示,说实话,我觉得vue在typescript的还有很长的路要走,主要是这么几个原因:

向下兼容?

看到这里,大家也都看到vue setup() 功能的新特性, 和2.x的很多功能是冲突的, 新 API 的引入实际上会让相当一部分的旧选项长远来说变得没有必要。

所以vue在未来也将会提供 2 个vue3.0的版本,

有哪些选项在标准版本是没有的呢?

我来说一下这个问题,也就是说vue官方心中的3.0版本是标准版本,兼容版本仅仅是为了2.x用户的迁移,可能不会长期支持。而且很严重的是,这种风格的vue,我相信很多人是 hold 不住的,不好上手。我经常向新手推荐vue,就是因为他强大,而且容易上手,但这种函数api可能就对新手不太友好。这样下来,不用hooks的人用3.0的意义也就不大,vue的社区可能会分裂,一种是 2.x,一种是3.x,像 React 一样,组件流派和hooks真香党,但和react不同的是,vue的社区不如react强大,vue的核心插件都是官方维护,这让使用vue的人技术栈都差不多,同个技术栈也好维护,但可能也因为这样,导致社区不活跃(官方做的太多,社区就不活跃,像angular,功能做得太完善,社区都没东西好做了,当然也有集成太多不好拓展的缘故吧)。说实话,我认为vue的社区经不起折腾,不活跃是一个点,另一个点是目前所有的社区组件都基于2.x,到时候3.x是要重写呢,还是用兼容版本让3.x失去意义呢?

你问我react的社区怎么就不怕 hooks 提案分割社区?

我认为react的社区很活跃,而且本来就百si花fen齐wu放lie,就当一个全局状态管理就有三种流行方案 redux, mobx, rxjs,不像vue一个vuex由官方维护,所以react也不介意再分裂一次社区。也就是这种状态,让两个不同react技术栈的人来维护同一本代码十分痛苦。怎么说呢? 各有千秋吧。

点题

最后,再问一句,

这样的 vue, 你还会用吗?

你是选择2.x还是3.0呢?

真香警告!!

MikuBlog commented 5 years ago

这不是让我放弃vue的理由🙃

weixiaolv commented 5 years ago

期待你的下期节目《为什么我从Vue转React了》

coppyC commented 5 years ago

@Tinyjimmy 不用期待了,就是现在 #9

BoBoooooo commented 3 years ago

顶一下楼主

Vue3还是持观望态度,社区UI库,目前似乎只有antd for vue 出了一个beta版本支持Vue3

element-ui官方不维护了,多个社区版本还在紧锣密鼓的折腾中...

2.x的老项目迁移成本太大了,新项目会考虑上Vue3

coppyC commented 3 years ago

饿了么ui居然不维护了,怎么说也是国内第一批vue 的 ui了,怪可惜的。

jw-12138 commented 3 years ago

饿了么ui居然不维护了,怎么说也是国内第一批vue 的 ui了,怪可惜的。

可能是攒的issue太多了🌝