React 入门:从安装到第一个应用的实战分享

慢慢写代码
2025-06-13 14:17
阅读 300

开篇:为什么要写这篇文章?

开篇:为什么要写这篇文章?

作为一名拥有5年前端开发经验的工程师,我接触过 Vue、Angular,也尝试过原生 JavaScript 和 jQuery 的项目。但真正让我对前端开发产生全新认识的是 React ——它不仅改变了我对组件化开发的理解,还帮助我在多个实际项目中更高效地构建用户界面。

不过说实话,当初刚上手 React 时我也踩了不少坑。比如环境搭建不成功、组件之间状态管理混乱、打包部署出现各种奇怪问题……当时要是有一篇结合真实工作场景、带点人情味又足够“接地气”的入门教程该多好啊!

今天我就以第一人称的角度,来和大家分享我第一次用 React 搭建完整应用的经历,包括我是怎么一步步从 create-react-app 走向脚手架自定义,从组件结构设计到上线部署的全过程。如果你是 React 新手或者正在犹豫要不要入坑,希望这篇真实的分享能帮你少走一些弯路。


我的第一个 React 项目背景

我的第一个 React 项目背景

那是在我工作的第二年,我们团队接到一个任务:为公司内部运营部门开发一套数据看板系统(Dashboard),用于展示每日订单量、用户活跃度、客服响应时间等关键业务指标。

原本这套系统的原型是基于 Vue 开发的,但在新版本重构时我们决定尝试 React,主要出于以下几点考虑:

  1. React 在公司内的使用率更高,方便未来维护。
  2. 图表库生态成熟,尤其是像 ECharts、Recharts 这些与 React 结合良好的组件。
  3. 跨平台能力更强,虽然这个项目本身只做 Web 端,但考虑到后续可能接入移动端。

于是我的 React 正式旅程也就此开始。


面临的问题和挑战

面临的问题和挑战

刚接手项目时,其实我内心有点忐忑。之前写过几个小 demo,但没有做过完整的应用。面对一个真实项目,我遇到的第一个问题就是:

🚨 “我要从哪里开始?”

网上关于 React 的资料太多了,文档也挺详细。但作为一个新手,面对一堆术语——JSX、Hooks、状态管理、路由、Redux、React Router、Webpack……根本无从下手。

我当时甚至卡在了安装环节。虽然知道可以用 create-react-app 快速启动,但也听说它不够灵活,很多公司都会自己搭 Webpack + Babel + ESLint 的脚手架。这该怎么办?

于是我在“该不该自己配环境”这个问题上纠结了好几天……

最终选择了一个折中方案:先用 CRA 快速跑通功能,再逐步替换配置。事实证明这是一个很聪明的做法。


解决思路和技术方案

解决思路和技术方案

我们先理清楚整个项目的搭建流程:

✅ 使用 Create React App 快速启动

npx create-react-app dashboard

然后进入目录运行:

cd dashboard
npm start

这时候本地会起一个开发服务器,默认打开 http://localhost:3000,你就看到 React 的欢迎页面了。

💡 小提示:如果你发现终端报错类似 npm ERR! code ENOENT 或者网络请求失败,有可能是你当前 npm 源不稳定。可以尝试使用 npm config set registry https://registry.npmmirror.com 切换成国内镜像源试试。

🧱 组织项目结构

CRA 默认生成的文件结构非常简洁,只有几个基础文件。但对于稍微大一点的项目来说,我们需要更清晰的组织方式:

我通常会这样划分:

src/
├── components/       # 可复用的 UI 组件
├── pages/            # 页面级组件
├── services/         # 接口调用模块
├── hooks/            # 自定义 Hooks
├── utils/            # 工具函数
├── assets/           # 图片资源
├── App.js            # 根组件
└── index.js          # 应用入口

这样的结构有助于多人协作和后期维护。你不用一开始就搞得特别复杂,但至少要有初步规划。


实战代码片段分享

下面是我给 Dashboard 主页写的第一个组件示例:

👀 Home.js

import React from 'react';
import './Home.css';

const Home = () => {
  return (
    <div className="dashboard-container">
      <h1>数据看板</h1>
      <p>欢迎使用新版运营统计系统!</p>
    </div>
  );
};

export default Home;

📁 对应的 CSS 文件 Home.css

.dashboard-container {
  padding: 20px;
}
.dashboard-container h1 {
  color: #2c3e50;
}
.dashboard-container p {
  font-size: 16px;
}

看起来很简单对吧?但我一开始在这里也出过一个常见的样式加载错误。比如我把 CSS 文件改名为 home.module.css 却还是用普通引入的方式导入,结果样式没生效。

后来才知道这是 CSS Modules 的写法,需要用如下方式:

import styles from './home.module.css';

<div className={styles.dashboardContainer}>...</div>

这就是一个典型的新人误区,以为只要后缀是 .module.css,默认就会被识别。


踩过的坑及解决方法

❌ 1. 路由切换刷新后404

当我们在部署 React SPA(单页应用)到 Nginx 上时,访问首页没问题,但点击某个子页面(如 /orders/123)刷新后返回 404。

原因在于 Nginx 没有配置回退规则,把每个路径都当作真实文件处理了。

解决办法是在 Nginx 配置里加一行:

location / {
  try_files $uri $uri/ /index.html;
}

这就相当于告诉服务器:“找不到就回去找 index.html”。


❌ 2. 组件频繁重渲染影响性能

刚开始为了图省事,我经常会在组件内定义变量或函数直接用:

const MyComponent = ({ list }) => {
  const total = list.reduce((acc, item) => acc + item.value, 0);
  
  return <p>总数:{total}</p>;
};

这种写法虽然看起来没问题,但如果 list 是动态更新的数据,那么每次父组件更新都会触发重新计算,严重影响性能。

后来我改用了 useMemo

import { useMemo } from 'react';

const MyComponent = ({ list }) => {
  const total = useMemo(() => {
    return list.reduce((acc, item) => acc + item.value, 0);
  }, [list]);

  return <p>总数:{total}</p>;
};

这样一来,只有当 list 改变时才会重新计算,避免无效重复执行。


❌ 3. 异步获取数据时机拿不准

在组件中拉取接口数据,很多人喜欢一股脑全丢进 useEffect 里:

useEffect(() => {
  fetchData();
}, []);

但问题是有时候组件还没挂载完就开始请求,导致视图显示异常;或者组件卸载了还在执行回调,引发内存泄漏。

正确的做法应该是加上清理逻辑和判断条件:

useEffect(() => {
  let isMounted = true;

  const loadData = async () => {
    const data = await fetchSomeData();
    if (isMounted) {
      setData(data);
    }
  };

  loadData();

  return () => {
    isMounted = false;
  };
}, []);

这样即使组件销毁,也不会造成副作用泄漏。


最终成果和收获

经过两周的开发+测试,我们的数据看板顺利上线,UI 响应迅速、交互流畅,获得了运营同事的认可。

这次项目带给我的最大收获有三个:

  1. React 真正提升了开发效率,组件化开发让代码结构更清晰、可维护性更高;
  2. Hooks 让状态管理变得优雅,再也不用担心复杂的状态嵌套;
  3. 工具链和架构思维进一步提升,从 CRA 到 eject 再到部分手动接管,我对工程化有了更深的理解。

给初学者的建议

前端性能优化图表-1

如果你刚刚开始学习 React,我有几个真心话想送给你:

✅ 别死磕概念,从项目入手最有效

React 的文档确实很棒,但太理论化。建议你一边看文档一边动手实践。哪怕只是做个 TODO List,也好过空看文档。

✅ 不要一上来就学 Redux

很多文章一上来就说你要学 Redux、MobX。其实大多数中小型项目完全不需要这些。useState + useContext 就已经够用。别给自己设门槛,先学会走路再学跑。

✅ 多用 DevTools 调试组件和性能

Chrome 插件 React Developer Tools 简直神器,不仅可以查看组件树结构、props 传递,还能监控渲染时间和性能瓶颈。

✅ 关注用户体验细节

不要只顾着写功能。比如 loading 状态、按钮禁用、错误提示、表单验证,这些看似琐碎的东西往往决定了用户体验的好坏。

✅ 学会善用 Lint 工具和格式化插件

ESLint + Prettier + Husky,这些工具不仅能帮你规范代码风格,更重要的是防止低级错误的发生。


总结一下

从第一次听到 React、安装失败、组件写不出来,再到后来独立完成项目并顺利上线,这段经历让我深刻体会到:React 其实并不难,难的是坚持实践

只要你肯动手、愿意犯错、不怕折腾,React 的大门随时为你敞开。

希望这篇真实分享能帮你在学习 React 的路上少走一些弯路,快速上手写出自己的第一个完整应用。

如果你在过程中遇到了什么问题,欢迎留言交流。也祝你能早点做出属于你的 React 作品!


📌 如果你觉得这篇文章有用,别忘了点赞、收藏、转发。也欢迎关注我,我会持续输出更多前端实战经验分享。

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝