news 2026/4/19 10:44:45

教你快速从Vue 开发者 → React开发者转变!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
教你快速从Vue 开发者 → React开发者转变!

前言

工作这么多年,一直用的都是vue,对vue框架也最熟悉,但最近想深入学习react,之前也学过,只懂一点皮毛,对很多写法还是不理解,我就在想既然我比较熟悉vue,那能不能设计一份react和vue的转化总结,这样用理解vue的方式来学习react那就事半功倍了。

现在AI这么方便,我就把我的需求说给chatGPTchatGPTchatGPT

了,他帮我设计了一份 VueVue开发者 →ReactReact

转化总结与对照表和一份学习计划。

真的一目了然,特别好理解,在上周末我根据这两份计划很快的上手了react框架,也顺利完成一个小型的react项目,这次没有一知半解!

虽然AI可以帮我写代码,但我们自己还是得掌握,不然可能连代码都看不懂,怎么去进行调试呢

AI帮我们写90%,那剩下10%就要自己来了!

AI真的很好用,它可以帮助我们快速学习任何我们想学习的,还是使用最简单易上手的方式!

以下就是对照表以及学习计划了,希望对想快速上手react的小伙伴有点借鉴意义!

核心思想对比

Vue

  • 使用模板(HTML-like template)
  • 自动依赖追踪的响应式系统
  • 指令系统(v-if / v-for / v-model)
  • 双向绑定常见
  • 更“框架化”,封装度高

React

  • UI = f(state) 的函数式思想
  • 使用 JSX(模板+JS融合)
  • 没有自动依赖追踪,需要手动声明(useEffect)
  • 单向数据流
  • 更灵活、更偏底层

API 对照表

核心 API 对照

VueReact说明
data()useState声明组件状态
computeduseMemo计算属性
watchuseEffect监听值变化或模拟生命周期
方法(methods)普通函数不需要特殊 API
ref()useRefDOM 或变量引用
provide / injectcreateContext + useContext跨组件传递数据
v-modelonChange + useState双向绑定自己实现
v-ifJS 表达式(条件渲染){ condition && <Component /> }
v-forarr.map()列表渲染
组件通信(props)props完全一致
子组件事件(emit)父传入回调函数回调作为 props

生命周期迁移

Vue → React 生命周期对照表

VueReact
onMounteduseEffect(() => {}, [])
onUpdateduseEffect(() => {})
onUnmounteduseEffect(() => return cleanup, [])
onActivated无,需要自定义
onDeactivated无,需要自定义
beforeMount / beforeUpdate无(通常不需要)

示例:Vue → React 生命周期对比

Vue

<script setup> onMounted(() => console.log("mounted")) onUnmounted(() => console.log("unmounted")) </script>

React

useEffect(() => { console.log("mounted"); return () => console.log("unmounted"); }, []);

状态管理迁移

Vue → React 状态管理选择

VueReact 等价方案特点
Pinia

Zustand

写法最像,轻量好用(推荐)
VuexRedux Toolkit官方推荐、企业级
composables自定义 Hooks逻辑复用方式几乎一样
reactive()useState/useReducer响应式状态

Zustand(最适合 Vue 开发者)

Zustand 使用方式类似 Pinia,推荐入门 React 状态管理就用它。

示例:Zustand vs Pinia

Pinia

export const useUserStore = defineStore('user', { state: () => ({ name: 'Echo' }), actions: { setName(name) { this.name = name } } })

Zustand

const useUserStore = create((set) => ({ name: "Echo", setName: (name) => set({ name }), }));

几乎一模一样。

路由迁移

Vue Router → React Router

对照表

Vue RouterReact Router
routes 数组<Routes><Route/></Routes>
router.push()useNavigate()
获取参数useParams()
路由守卫自定义鉴权组件包裹 Route

Vue 路由

const routes = [ { path: '/user/:id', component: User } ]

React 路由

<Routes> <Route path="/user/:id" element={<User />} /> </Routes>

读取参数:

const { id } = useParams()

项目结构对照

Vue 项目结构

src/ components/ views/ store/ router/ composables/ assets/

React 推荐结构

src/ components/ # 公共组件 pages/ # 页面级组件 hooks/ # 自定义 Hooks store/ # 状态管理(Zustand / Redux) router/ # 路由定义 services/ # API 请求封装 assets/

思维模型转化总结

1. 模板 → JSX(最大的差异)

Vue:

<v-if="ok">hello</v-if>

React:

{ok && <div>hello</div>}

2. 自动响应式 → 显式依赖声明

Vue 自动追踪
React 必须写依赖数组

3. 逻辑复用方式变化

Vue compositions → React 自定义 Hooks

4. 组件通信完全一致(props)

但事件改为父传回调函数

5. React 更纯粹、更 JavaScript 化

少魔法、少黑盒、更多掌控权。

学习计划(适合 Vue 开发者)

📘 阶段 1:核心理念与基础 JSX

⭐ 核心目标

  • 理解 React 哲学(UI = f(state))
  • 能用 JSX 编写组件、列表、事件

✅ 实战 1:Hello React + 计数器

1. 新建项目(Vite)

npm create vite@latest react-basic --template react cd react-basic npm install npm run dev

2. 编写一个计数器(App.jsx)

import { useState } from "react"; export default function App() { const [count, setCount] = useState(0); return ( <div style={{ padding: 20 }}> <h1>计数器</h1> <p>当前值:{count}</p> <button onClick={() => setCount(count + 1)}>增加</button> </div> ); }

📝 Vue 对照:

<script setup> const count = ref(0) </script> <button @click="count++">{{ count }}</button>

🌱 实践任务

  • 写一个从 1 增加到 100 的进度条动画
  • 写一个列表渲染组件(todoList)

📘 阶段 2:Hooks 深入

⭐ 核心要点

  • useState
  • useEffect(替代 watch / 生命周期)
  • useMemo / useCallback(性能)
  • useRef(替代 Vue的模板 ref)
  • 自定义 hooks(对 Vue 用户最重要)

✅ 实战 2:useEffect 生命周期模拟

Vue → React 生命周期对照

VueReact
onMounteduseEffect(() => {}, [])
onUpdateduseEffect(() => {})
onUnmountedreturn () => {}

例子:监听窗口大小

import { useState, useEffect } from "react"; export default function WindowSize() { const [size, setSize] = useState({ w: window.innerWidth, h: window.innerHeight }); useEffect(() => { const onResize = () => { setSize({ w: window.innerWidth, h: window.innerHeight }); }; window.addEventListener("resize", onResize); return () => window.removeEventListener("resize", onResize); }, []); return <div>窗口大小:{size.w} x {size.h}</div>; }

✅ 实战 3:自定义 Hook(重要)

Vue 组合式 API 与 React 自定义 hook 是一样的概念。

useFetch.js

import { useState, useEffect } from "react"; export function useFetch(url) { const [data, setData] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { fetch(url) .then((r) => r.json()) .then((json) => { setData(json); setLoading(false); }); }, [url]); return { data, loading }; }

使用它

import { useFetch } from "./useFetch"; export default function UserList() { const { data, loading } = useFetch("https://jsonplaceholder.typicode.com/users"); if (loading) return <p>加载中...</p>; return ( <ul> {data.map((u) => <li key={u.id}>{u.name}</li>)} </ul> ); }

🌱 实践任务

  • 写一个useLocalStorage(key, defaultValue)
  • 写一个useCountdown(秒)
  • 写一个useDebounce(value, delay)

📘 阶段 3:React Router

✅ 项目结构

src/ pages/ Home.jsx Detail.jsx main.jsx App.jsx

安装

npm install react-router-dom

✅ 实战 4:配置基础路由

import { BrowserRouter, Routes, Route } from "react-router-dom"; import Home from "./pages/Home"; import Detail from "./pages/Detail"; export default function App() { return ( <BrowserRouter> <Routes> <Route path="/" element={<Home />} /> <Route path="/detail/:id" element={<Detail />} /> </Routes> </BrowserRouter> ); }

Detail.jsx

import { useParams } from "react-router-dom"; export default function Detail() { const { id } = useParams(); return <h2>详情页面 - ID: {id}</h2>; }

🌱 实践任务

  • 写一个商品列表页 + 商品详情页
  • 点击列表项跳转到详情页

📘 阶段 4:状态管理

为了更像 Vue 的 Pinia,你会更喜欢Zustand

👉 为什么不用 Redux?

  • Redux 心智负担大(action/reducer/immutable)
  • Zustand 更像 Pinia:简单、轻巧、API优雅

📦 安装 Zustand

npm install zustand

✅ 实战 5:创建用户 store(类似 Pinia)

src/store/user.js

import { create } from "zustand"; export const useUserStore = create((set) => ({ name: "Echo", setName: (name) => set({ name }), }));

在组件里使用

import { useUserStore } from "../store/user"; export default function Profile() { const { name, setName } = useUserStore(); return ( <div> <p>用户名:{name}</p> <input onChange={(e) => setName(e.target.value)} /> </div> ); }

🌱 实践任务

  • 给 store 增加:token / userInfo / logout
  • 全局 Layout 读取用户信息

📘 阶段 5:接口请求与工程化

推荐:axios 封装 + useRequest Hook

✅ 实战 6:axios 封装

/src/api/request.js

import axios from "axios"; const request = axios.create({ baseURL: "https://api.example.com", timeout: 8000, }); request.interceptors.response.use((res) => res.data); export default request;

使用 useRequest Hook(可复用)

import { useEffect, useState } from "react"; import request from "../api/request"; export function useRequest(url) { const [data, setData] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { request(url).then((res) => { setData(res); setLoading(false); }); }, [url]); return { data, loading }; }

📘 阶段 6:综合项目

做一个后台管理系统模版(React)

功能组成

  • 登录页
  • Layout 布局(侧边栏 + Header)
  • react-router 路由守卫
  • 表格 CRUD(增删改查)
  • Zustand 全局状态(保存用户)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/19 2:41:40

想让故障修复时间缩短80%?先掌握这3个应急响应环节

在数据驱动的时代&#xff0c;数据库已成为IT系统的核心命脉。但残酷的现实是&#xff0c;75%的严重业务中断源于未被及时发现的数据库隐患&#xff0c;超过60%的数据库故障因未能提前预警而升级为严重事故。想要将故障平均修复时间缩短80%&#xff0c;关键在于建立一套高效的应…

作者头像 李华
网站建设 2026/4/18 15:11:27

【必藏】AI智能体架构完全指南:从底层逻辑到落地应用的9大核心技术

2025年&#xff0c;AI智能体已经不再是概念模型&#xff0c;它们正在逐步落地为企业级工具、产品模块&#xff0c;甚至成为工作流的“第二大脑”。 而在这背后&#xff0c;一整套系统化的智能体架构&#xff0c;正悄然决定着这些Agent的效率、扩展性与演化方向。如果说大语言模…

作者头像 李华
网站建设 2026/4/16 18:36:29

哨兵1A/1B数据的升轨和降轨问题

Sentinel-1A/1B为什么需要区分升轨和降轨&#xff1f;降轨&#xff08;Descending&#xff09;&#xff1a;指卫星从北向南飞行升轨&#xff08;Ascending&#xff09;&#xff1a;指卫星从南向北飞行Sentinel-1 卫星以两种轨道方向交替采集数据&#xff0c;升轨和降轨的观测几…

作者头像 李华
网站建设 2026/4/17 1:30:46

未来5-10年,品牌商渠道数字化要怎么做?

大量的企业开始建设订货平台&#xff0c;对产业升级来说是不是一个强烈的利好信号&#xff1f;恰恰相反&#xff0c;这意味着单纯靠工具上线来驱动业务这件事&#xff0c;正在从一个高价值方案变成一个平庸的标配。 在渠道领域&#xff0c;过去几年显而易见的一个现象就是&…

作者头像 李华
网站建设 2026/4/18 7:56:42

OmegaFold:从氨基酸序列到三维结构的智能预测之旅

OmegaFold&#xff1a;从氨基酸序列到三维结构的智能预测之旅 【免费下载链接】OmegaFold OmegaFold Release Code 项目地址: https://gitcode.com/gh_mirrors/om/OmegaFold 想象一下&#xff0c;你手中只有一串看似简单的氨基酸序列&#xff0c;却能够"看到"…

作者头像 李华
网站建设 2026/4/17 19:07:45

终极本地离线翻译:告别网络依赖的完整AI翻译解决方案

还记得那次在飞往纽约的航班上&#xff0c;我面对着一份急需翻译的商业合同却束手无策吗&#xff1f;空姐抱歉地告诉我机上WiFi无法连接翻译网站&#xff0c;那一刻的焦虑至今难忘。正是这样的经历&#xff0c;让我发现了本地离线翻译的真正价值——当网络不可用时&#xff0c;…

作者头像 李华