React 入门:从安装到第一个应用的实战分享
开篇:为什么要写这篇文章?

作为一名拥有5年前端开发经验的工程师,我接触过 Vue、Angular,也尝试过原生 JavaScript 和 jQuery 的项目。但真正让我对前端开发产生全新认识的是 React ——它不仅改变了我对组件化开发的理解,还帮助我在多个实际项目中更高效地构建用户界面。
不过说实话,当初刚上手 React 时我也踩了不少坑。比如环境搭建不成功、组件之间状态管理混乱、打包部署出现各种奇怪问题……当时要是有一篇结合真实工作场景、带点人情味又足够“接地气”的入门教程该多好啊!
今天我就以第一人称的角度,来和大家分享我第一次用 React 搭建完整应用的经历,包括我是怎么一步步从 create-react-app 走向脚手架自定义,从组件结构设计到上线部署的全过程。如果你是 React 新手或者正在犹豫要不要入坑,希望这篇真实的分享能帮你少走一些弯路。
我的第一个 React 项目背景

那是在我工作的第二年,我们团队接到一个任务:为公司内部运营部门开发一套数据看板系统(Dashboard),用于展示每日订单量、用户活跃度、客服响应时间等关键业务指标。
原本这套系统的原型是基于 Vue 开发的,但在新版本重构时我们决定尝试 React,主要出于以下几点考虑:
- React 在公司内的使用率更高,方便未来维护。
- 图表库生态成熟,尤其是像 ECharts、Recharts 这些与 React 结合良好的组件。
- 跨平台能力更强,虽然这个项目本身只做 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 响应迅速、交互流畅,获得了运营同事的认可。
这次项目带给我的最大收获有三个:
- React 真正提升了开发效率,组件化开发让代码结构更清晰、可维护性更高;
- Hooks 让状态管理变得优雅,再也不用担心复杂的状态嵌套;
- 工具链和架构思维进一步提升,从 CRA 到 eject 再到部分手动接管,我对工程化有了更深的理解。
给初学者的建议

如果你刚刚开始学习 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