
Vue 的起源
React 的起源
Vue 的核心思想
渐进式框架:Vue 的设计思想是渐进式的,它允许开发者逐步采用其功能。你可以仅仅把 Vue 当作一个用于处理视图层的库来使用,也可以在现有项目中嵌入 Vue,逐步将其功能应用于更多组件或页面。
React 的核心思想
单向数据流:React 强调使用单向数据流来管理组件的状态和数据。组件通过 props(父组件传递的属性)来接收数据,并通过状态(state)来管理自己的数据。当状态或属性发生变化时,React 通过虚拟 DOM 进行高效的 DOM 更新。
Vue
Vue 使用模板语法,你可以在 Vue 模板中直接编写类似 HTML 的代码,并使用 Vue 的指令来实现数据绑定和其他功能。
<template>
<div>
<h1>{{ message }}</h1>
<button @click="increment">Increment</button>
</div>
</template>React
React 使用 JSX,你需要在 JavaScript 中编写类似 HTML 的代码。JSX 允许你在组件中直接嵌入 HTML 标签,并使用 JavaScript 表达式来处理逻辑和数据。
import React, { useState } from "react";
function MyComponent() {
const [count, setCount] = useState(0);
return (
<div>
<h1>{count}</h1>
<button onClick={() => setCount(count + 1)}>Increment</button>
</div>
);
}Vue
Vue 组件可以使用 Vue.component 方法全局注册,也可以使用单文件组件方式进行局部注册。单文件组件将模板、样式和逻辑写在同一个文件中,更加方便组织和管理组件代码。
<!-- 全局注册组件 -->
<script>
Vue.component("my-component", {
// 组件配置
});
</script>
<!-- 单文件组件方式 -->
<template>
<!-- 组件模板 -->
</template>
<script>
export default {
// 组件配置
};
</script>React
React 组件通常以函数或类的形式进行声明。使用函数组件时,组件本身就是一个函数,接收 props 作为参数并返回表示 UI 的 React 元素。使用类组件时,组件继承自 React.Component,并实现 render 方法来返回 React 元素。
// 函数组件
function MyComponent(props) {
// 组件逻辑
return <div>{props.message}</div>;
}
// 类组件
class MyComponent extends React.Component {
render() {
// 组件逻辑
return <div>{this.props.message}</div>;
}
}Vue
Vue 提供了双向数据绑定,你可以直接在模板中使用 语法来绑定数据,同时也可以通过指令来实现数据绑定,如 v-bind 和 v-model。
<template>
<div>
<input v-model="message" />
<p>{{ message }}</p>
</div>
</template>React
React 使用单向数据流的思想,父组件通过 props 将数据传递给子组件,子组件不能直接修改父组件传递的数据。子组件可以通过调用父组件传递的回调函数来实现数据传递。
import React, { useState } from "react";
function ParentComponent() {
const [message, setMessage] = useState("");
const handleChange = (event) => {
setMessage(event.target.value);
};
return (
<div>
<ChildComponent message={message} onChange={handleChange} />
<p>{message}</p>
</div>
);
}
function ChildComponent({ message, onChange }) {
return <input value={message} onChange={onChange} />;
}Vue
Template 模板 + options API,api 非常多
React
Virtual DOM + Diff 算法,核心 setState,hooks
Vue
依然定位简单易上手(渐进式开发),依然是考虑通过依赖收集来实现数据可变,更丰富的 API,又 Object 改为 Proxy 进行依赖收集
React
函数式编程,减少副作用(hooks)
React 的响应式原理
Vue 的响应式原理
React 和 Vue 的 Diff 算法有一些相似之处,也有一些不同之处。
React 和 Vue 在事件处理机制上有以下主要区别
camelCase 的事件名称,如 onClick、onChange。kebab-case 的事件名称,如 @click、@change。JSX 属性绑定事件处理函数。v-on 指令绑定事件处理函数。SyntheticEvent。DOM 事件。preventDefault。.prevent 修饰符阻止事件默认行为。bind() 或箭头函数传参。null 来移除。.once 或 v-on="{once: fn}" 来一次性绑定事件。总体上,Vue 的事件系统更加简单和便利,React 的事件系统更加自由和灵活。但两者都支持声明式的事件处理方式。
总体来说,Vue 和 React 都是优秀的前端 UI 框架,各有特色。
Vue 的优点是更简单、轻量、易上手,文档丰富,渐进式框架设计让上手更容易;React 的优点是灵活、性能更优、生态更丰富,JSX 使组件更直观,虚拟 DOM 使重新渲染更高效。
两者都支持组件化、响应式编程、高效渲染虚拟 DOM,都可以用于构建单页面应用。
Vue 更加简单同时功能完备,React 更加灵活但需要配合其生态圈,所以两者可以互补共存,可根据项目需求选择使用。
未来 Vue 和 React 都在完善函数式编程和跨端支持,提升性能,都在努力提升前端开发体验。