React入门教程:从安装到第一个应用
引言:为什么我决定写这篇React入门文章?

去年,我加入了一家创业公司,负责前端开发。入职的第一天就被分配到了一个项目任务:用React重构现有的管理后台系统。虽然我之前接触过一些Vue的项目,但React对我来说还是一个全新的领域。
说实话,刚开始真的有点懵。网上关于React的资料很多,但质量参差不齐,有些教程过于基础,有些又直接跳到高级概念,中间的过渡非常生硬。我自己摸索了几天,踩了不少坑,也查了很多文档、社区讨论和官方指南。最终完成了一个简单的用户管理模块后,我忽然意识到 —— 这个学习过程完全可以更高效一些。
今天我就想以一个实际开发者的身份,分享一下我是如何从零开始上手React,并成功做出第一个小应用的经历。这篇文章不仅会讲清楚基本概念和安装流程,还会结合我在实际工作中遇到的问题,带你一步步从0搭建一个React项目,并解决一些常见的“坑”。
项目背景:为什么要选择React?

我们原来的管理系统是基于jQuery和原生JavaScript写的,随着业务增长,代码变得越来越难以维护,组件之间耦合度高,复用性差,调试也成了噩梦。产品经理经常改需求,每次都要大动干戈,效率很低。
于是,技术负责人提议用现代前端框架进行重构。我们团队做了几个技术选型对比:
| 框架 | 学习曲线 | 社区活跃度 | 性能 | 开发效率 | 适合场景 |
|---|---|---|---|---|---|
| React | 中等 | 非常高 | 优秀 | 高 | 复杂交互、中大型项目 |
| Vue | 较低 | 高 | 优秀 | 高 | 快速开发、中小型项目 |
| Angular | 高 | 中 | 良好 | 中 | 企业级大型项目 |
考虑到我们的团队规模不大,且希望快速迭代,同时未来可能需要接入更多第三方生态(比如Redux、React Router等),最后我们选择了React + TypeScript的技术栈。
问题描述:新手的困惑与挑战

作为一个刚入坑React的新手,我在学习过程中遇到了几个关键问题:
不知道该从哪里开始学起?
- 是先学JSX语法?还是虚拟DOM?还是生命周期?
- 官方文档太正式看不懂,社区教程又太碎片化。
安装配置太麻烦?
- Create React App 和 Vite 哪个更好?
- Webpack到底要不要自己配?
项目结构怎么组织?
- 组件拆分方式、文件命名规范、状态管理怎么安排?
真实项目中遇到的bug不会调试?
- 控制台报错看不懂,DevTools用了也不会。
性能优化怎么做?
- 页面加载慢怎么办?首屏渲染时间如何提升?
这些问题在真正动手写第一个React应用时都会暴露出来。所以我决定,从零开始,一步一步构建一个完整的React应用,并记录下整个过程中的所思所感。
解决方案:从创建项目到第一个组件

第一步:安装React环境
刚开始我也纠结过是否要从零手动搭建项目,但后来发现对于初学者来说,使用Create React App(简称CRA)是最简单快捷的入门方式。
npx create-react-app my-app
cd my-app
npm start
执行这几行命令后,你就能看到一个默认页面跑起来啦。CRA帮我们自动配置了Webpack、Babel、ESLint等一系列工具,非常省心。
小贴士:如果你想要更轻量更快的构建工具,也可以考虑用Vite。不过初期建议先用CRA熟悉React的基础结构。
第二步:理解React的核心概念
组件(Components)
React是以组件为单位来构建UI的。我们把界面拆分成一个个独立的小块,每个块就是一个组件。
function Welcome() {
return <h1>Hello, welcome to React!</h1>;
}
JSX语法
这是React特有的HTML-like语法糖,可以让你在JavaScript中写HTML结构。
const element = <div className="container">This is JSX</div>;
注意:class 在JSX中要写成 className。
状态(State)
通过useState这个Hook,我们可以让组件拥有自己的内部状态。
import React, { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>当前计数:{count}</p>
<button onClick={() => setCount(count + 1)}>点我加一</button>
</div>
);
}
生命周期(useEffect)
用来处理副作用,比如数据获取、订阅事件等。
useEffect(() => {
console.log('组件挂载或更新');
}, [依赖项]);
第三步:搭建第一个完整应用
我们来做一个简单的“待办事项”应用吧。功能包括:
- 输入框输入新任务
- 添加按钮添加任务
- 列表展示所有任务
- 可以删除单个任务
目录结构如下:
src/
├── components/
│ ├── TodoForm.jsx
│ └── TodoList.jsx
├── App.jsx
└── index.js
核心代码一览:
App.jsx
import React, { useState } from 'react';
import TodoForm from './components/TodoForm';
import TodoList from './components/TodoList';
function App() {
const [todos, setTodos] = useState([]);
const addTodo = (text) => {
if (!text.trim()) return;
setTodos([...todos, text]);
};
const deleteTodo = (index) => {
const newTodos = todos.filter((_, i) => i !== index);
setTodos(newTodos);
};
return (
<div>
<h1>我的待办事项</h1>
<TodoForm onAdd={addTodo} />
<TodoList items={todos} onDelete={deleteTodo} />
</div>
);
}
export default App;
TodoForm.jsx
function TodoForm({ onAdd }) {
const [input, setInput] = useState('');
const handleSubmit = (e) => {
e.preventDefault();
onAdd(input);
setInput('');
};
return (
<form onSubmit={handleSubmit}>
<input
type="text"
value={input}
onChange={(e) => setInput(e.target.value)}
placeholder="输入新任务..."
/>
<button type="submit">添加</button>
</form>
);
}
TodoList.jsx
function TodoList({ items, onDelete }) {
return (
<ul>
{items.map((item, index) => (
<li key={index}>
{item}
<button onClick={() => onDelete(index)}>删除</button>
</li>
))}
</ul>
);
}

踩坑经验:新手必看
1. 组件间通信搞不清?props传递太复杂?
在刚开始的时候,我总是把所有的state都放在父组件里,导致父子组件之间的props层层传递,非常繁琐。
解决方法: 后来引入了Context API,再结合useReducer简化状态管理。或者你也可以直接上手Redux Toolkit,它对新手友好得多。
2. 样式冲突?CSS模块化救我狗命
原本我把所有CSS都写在index.css里,结果不同组件的类名冲突,样式乱套。
解决方案: 使用CSS Modules,给每个组件绑定唯一的类名。
/* TodoForm.module.css */
.input-field {
border: 1px solid #ccc;
}
在组件中引入:
import styles from './TodoForm.module.css';
<input className={styles['input-field']} />
3. 浏览器兼容性问题?特别是IE11
我们有个客户还在用IE11,React默认不支持老旧浏览器。
解决办法:
- 安装polyfill:
npm install react-app-polyfill
- 在
index.js开头引入:
import 'react-app-polyfill/ie11';
import 'react-app-polyfill/stable';
- 修改
package.json中的browserslist字段:
"browserslist": {
"production": [
"ie 11",
"last 2 versions"
],
"development": [
"ie 11",
"last 2 versions"
]
}
4. 控制台报错看不懂?DevTools助你一臂之力
React DevTools插件简直是神器,不仅能查看组件树、props、state,还能检测性能瓶颈。
推荐搭配使用:
- Chrome插件:React Developer Tools
- VSCode插件:React Snippets
效果总结:上线后的收获
这个“待办事项”应用虽然简单,但让我彻底理解了React的基本开发流程。更重要的是,在后续参与真实项目的开发中,我几乎没有因为React的基础知识卡壳过。
最终我们顺利完成了管理系统的重构工作,前端体积减少了30%,首次加载时间优化了40%,产品经理反馈说用户操作流畅度明显提升。
我的经验分享:写给刚入门的你

别一开始就追求完美,先跑起来最重要。
- 很多人一开始就想学完所有知识才敢动手,其实完全没必要。React是一个“渐进式”的框架,你可以边学边做,逐步深入。
多写小项目练手,别怕重构。
- 我前前后后写了4~5个版本的“Todo List”,每次都比上次有进步。不要怕犯错,重构本身就是成长的过程。
善用社区资源,但要有批判性思维。
- GitHub、Stack Overflow、知乎、掘金都有大量React教程,但要注意辨别信息来源是否可靠。推荐关注:
关注用户体验和性能细节。
- 除了功能实现,还要思考:
- 页面加载是否足够快?
- 动画是否流畅自然?
- 移动端适配了吗?
- 有没有无障碍支持?
- 除了功能实现,还要思考:
持续学习新技术,保持好奇心。
- 现在React已经发展出了很多生态工具,比如:
- Zustand / Redux Toolkit(状态管理)
- TanStack Query(数据请求)
- React Router(路由管理)
- SWR / Axios(HTTP请求)
- Tailwind CSS / styled-components(样式方案)
- 现在React已经发展出了很多生态工具,比如:
掌握这些工具不仅能提升你的开发效率,还能让你在面试中脱颖而出。
写在最后
React并不是万能的,但它确实是目前最流行、最适合中大型项目的前端框架之一。它的灵活性、社区支持、以及生态完整性,让它成为了很多团队的首选。
如果你也是刚入门React,或者正在寻找一个合适的起点,希望这篇文章能帮你少走些弯路。记住一句话:React不是用来“学会”的,而是用来“做出来的”。
别犹豫了,打开终端,敲下npx create-react-app your-app-name,然后开始你的第一个React项目吧!
一起加油,前端路上,共勉! 🚀
如果你觉得这篇文章对你有帮助,欢迎点赞+收藏;如果你也有React学习的心得,欢迎留言交流~

评论 0