Skip to content

Vue与React的深度对比

核心思想

1. 编程范式

  • Vue:渐进式框架,同时支持选项式API和组合式API,更灵活
  • React:函数式编程,推崇纯函数和不可变数据流

2. 响应式原理

  • Vue:基于依赖追踪的响应式系统
  • React:基于状态不可变性的手动触发更新
javascript
// Vue的响应式
const state = reactive({
  count: 0
})

// 自动追踪依赖并更新
state.count++

// React的状态更新
const [count, setCount] = useState(0)

// 需要手动调用更新函数
setCount(count + 1)

模板语法

1. 视图表达

vue
<!-- Vue模板语法 -->
<template>
  <div>
    <p>{{ message }}</p>
    <button @click="handleClick">点击</button>
    <div v-if="show">条件渲染</div>
    <div v-for="item in list" :key="item.id">列表渲染</div>
  </div>
</template>
jsx
// React JSX语法
function Component() {
  return (
    <div>
      <p>{message}</p>
      <button onClick={handleClick}>点击</button>
      {show && <div>条件渲染</div>}
      {list.map((item) => (
        <div key={item.id}>列表渲染</div>
      ))}
    </div>
  )
}

2. 事件处理

  • Vue:使用@或v-on指令,支持事件修饰符
  • React:使用驼峰命名的事件处理器,需要手动处理事件细节

组件通信

1. 父子组件通信

vue
<!-- Vue父子通信 -->
<template>
  <child-component :prop-data="data" @custom-event="handleEvent" />
</template>

<script setup>
const emit = defineEmits(['custom-event'])
defineProps(['propData'])
</script>
jsx
// React父子通信
function ChildComponent({ data, onCustomEvent }) {
  return <div onClick={() => onCustomEvent(data)}>Child</div>
}

function ParentComponent() {
  return <ChildComponent data={data} onCustomEvent={handleEvent} />
}

2. 状态管理

  • Vue:Vuex/Pinia,响应式状态管理
  • React:Redux/Context,单向数据流
javascript
// Vue的Pinia示例
const store = defineStore('counter', {
  state: () => ({ count: 0 }),
  actions: {
    increment() {
      this.count++
    }
  }
})

// React的Redux示例
const counterSlice = createSlice({
  name: 'counter',
  initialState: { count: 0 },
  reducers: {
    increment: (state) => {
      state.count += 1
    }
  }
})

性能优化

1. 渲染机制

  • Vue:基于依赖追踪的细粒度更新
  • React:基于虚拟DOM的协调更新

2. 编译优化

javascript
// Vue3的静态提升
const hoisted = /*#__PURE__*/ createVNode('div', null, 'Static')

// React的memo优化
const MemoComponent = React.memo(function Component(props) {
  return <div>{props.data}</div>
})

生态系统

1. 路由

  • Vue Router:内置过渡效果,更简单的配置
  • React Router:更灵活的路由控制

2. 工具链

  • Vue:Vue CLI/Vite,更完整的开发工具
  • React:Create React App,更多的社区工具

学习曲线

1. 入门难度

  • Vue:更直观的API设计,学习曲线平缓
  • React:需要理解函数式编程概念,初期较陡

2. 最佳实践

  • Vue:官方指南更规范,社区实践较统一
  • React:社区最佳实践多样,需要自己判断

总结

TIP

Vue和React都是优秀的前端框架,各有特色:

  • Vue注重开发体验和易用性,提供了更多的内置功能和语法糖
  • React推崇函数式编程,更适合大型应用和团队协作
  • 框架选择应基于团队技术栈、项目需求和开发效率综合考虑