Vue相比React好在哪?

211 阅读2分钟

Vue相比React好在哪?

Vue与React对比,这是一个React老用户初次使用Vue的感受,觉得Vue有比React要好的地方,当然仅仅是一些细小的好处而已。简单整理如下:

1、不同设计哲学。

React是一个类库,而Vue是渐进式框架。虽然都是构建UI界面的工具,框架相比会提供更多的东西,约束、文档、工具等,类库则专注于提供关注的能力。

2、单一文件组件。

Vue单一组件包含HTML,CSS,JS,React的CSS分离,需要引入类似emotion或 Styled Components的专门库。

<template>
  <p>{{ greeting }} World!</p>
</template>

<script>
  module.exports = {
    data() {
      return {
        greeting: 'Hello',
      };
    },
  };
</script>

<style scoped>
  p {
    font-size: 2em;
    text-align: center;
  }
</style>
import React, { useState } from 'react';

function Button() {
  const [count, setCount] = useState(0);

  return (
    <button onClick={() => setCount(count + 1)}>
      Current count: {count}
      <br />
      Click me
    </button>
  );
}

3、官方支持的类库。

Vue官方默认有Router和Vuex,而React官方并未提供类似库,需要单独安装React-Router与redux。

4、Vue有官方的编码风格推荐,这个不错。

5、class与样式绑定。

Vue内置了对于class的支持,有:class=语法。

<div
  class="static"
  :class="{ active: isActive, 'text-danger': hasError }"
></div>

data() {
  return {
    isActive: true,
    hasError: false
  }
}

6、slot插槽。

Vue借鉴了Web Component规范,实现了slot,用来做占位替换。React中一切都是prop属性,如果要渲染多个子组件则需要设置多个属性。

function Nav({ left, right }) {
  return (
    <nav>
      <div className="left">{left}</div>
      <div className="right">{right}</div>
    </nav>
  );
}

function App() {
  return (
    <main>
      <Nav left={<Logo />} right={<UserDropdown />} />
    </main>
  );
}

7、指令修饰符。

Vue有使用 v-前缀的默认指令,从而实现一些诸如on,if,for或表达之类的操作。React实现类似指令则需要单独添加函数和组件。

<!-- full syntax -->
<a v-on:click="doSomething"> ... </a>

<!-- shorthand -->
<a @click="doSomething"> ... </a>
<form onSubmit.prevent={onSubmit} />
React.createElement(form, { onSubmit: preventWrapper(onSubmit) });
<!-- only call `submit()` when the `key` is `Enter` -->
<input @keyup.enter="submit" />

<input @keyup.page-down="onPageDown" />

8、表单数据模型绑定。

当将数据绑定到表单时,v-model指令可以实现数据与视图的联动,而React使用原生或setState的方式来写。

// Input
////////

// React
<input type="input" value={message} onChange={onChange} />

// Vue.js
<input type="input" v-model="message" />

// Checkboxes and Radiobuttons
////////

// React
<input type="checkbox" checked={message != null} onChange={onChange} />

// Vue.js
<input type="checkbox" v-model="message" />

// Select
////////

// React
<select value={message} onChange={onChange}>
	<option>A</option>
</select>

// Vue.js
<select v-model="message">
	<option>A</option>
</select>

9、自定义指令。

Vue支持directive来自定义指令,而React则需要自定义组件。

const app = Vue.createApp({})
// Register a global custom directive called `v-focus`
app.directive('focus', {
  // When the bound element is mounted into the DOM...
  mounted(el) {
    // Focus the element
    el.focus()
  }
})

<input v-focus />

10、TS支持。

Vue新版3.0已经采用了TypeScript来写,这意味着对于TS支持的更好。

最后,我并非说React不好,我并不认为他们有太大区别,以上这些都是Vue一些细微的优点而已。

总结与思考

有必要从React切换到Vue技术栈吗?答案是没有必要。我还是喜欢React仅是"library-ness"的概念,我已经熟悉React编程了。但我们可以从Vue中获得一点借鉴,尤其是官方提供的代码样式规则。希望本文对于不了解Vue的人来说是一扇窗户,可以开阔眼界。我惊讶地发现我居然喜欢了Vue的工作方式:)

原文: hswolff.com/blog/what-v…