Skip to content

Commit e72dd2a

Browse files
authored
feat: 2023.04.25
1 parent 3daaa6a commit e72dd2a

1 file changed

Lines changed: 280 additions & 0 deletions

File tree

Lines changed: 280 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,280 @@
1+
# 2023 React新手入门指南
2+
恭喜你选择React,这是一个非常火热和强大的前端框架!本指南将介绍React的基础知识和开发环境配置,帮助新手快速入门React开发。
3+
## React简介
4+
React于2013年由Facebook开源,是一个用于构建用户界面的JavaScript库。它可以让你构建交互式UI,在数据变化时高效更新和渲染UI。
5+
React主要特点:
6+
- 声明式编程 - 在React中使用stateful和stateless组件声明UI
7+
- 高效 - React通过算法diff更新真实DOM,极大提高渲染效率
8+
- 灵活 - 可以与已有代码和库结合使用
9+
- 组件化 - 使用小型,隔离的组件构建复杂UI
10+
- 单向数据流 - 数据从上至下流动,组件只从props获取数据并更新state
11+
## 开发环境配置
12+
要开始React开发,需要配置React开发环境,主要包括:
13+
1. Node.js - React需要Node.js环境。推荐使用Node.js 10+版本。
14+
2. npm - Node.js环境自带的包管理工具,可以方便安装和管理React相关工具。
15+
3. Create React App - Facebook官方支持的React项目脚手架,可以快速创建React应用。
16+
安装步骤:
17+
```bash
18+
# 安装Node.js,这将同时安装npm
19+
# 然后全局安装Create React App脚手架
20+
npm install -g create-react-app
21+
22+
# 创建一个新的React app
23+
create-react-app my-first-react-app
24+
25+
# 进入app目录并启动
26+
cd my-first-react-app
27+
npm start
28+
```
29+
项目启动后会自动打开浏览器窗口,地址是 http://localhost:3000 ,你会看到React欢迎界面,环境配置成功!
30+
## 项目结构
31+
Create React App创建的项目结构如下:
32+
```
33+
my-first-react-app/
34+
node_modules/
35+
public/
36+
index.html
37+
favicon.ico
38+
src/
39+
App.css
40+
App.js
41+
App.test.js
42+
index.css
43+
index.js
44+
logo.svg
45+
serviceWorker.js
46+
package.json
47+
README.md
48+
```
49+
- node_modules/: 依赖包目录
50+
- public/: 静态资源目录
51+
- src/: 源码目录
52+
- App.js: 根组件
53+
- index.js: 入口文件
54+
- package.json: 项目依赖和配置信息
55+
- README.md: 项目说明文档
56+
57+
## 编写你的第一个React组件
58+
打开src/App.js文件,这是根组件,修改为:
59+
```jsx
60+
import React from 'react';
61+
62+
function App() {
63+
return <h1>Hello world!</h1>
64+
}
65+
66+
export default App;
67+
```
68+
这个组件返回一个<h1>元素。将它渲染到根DOM节点,打开src/index.js修改为:
69+
```jsx
70+
import React from 'react';
71+
import ReactDOM from 'react-dom';
72+
import App from './App';
73+
74+
ReactDOM.render(<App />, document.getElementById('root'));
75+
```
76+
这会找到id为root的DOM元素并渲染 `<App />` 组件。
77+
保存文件并查看浏览器,你将看到“Hello world!” heading,恭喜你编写了第一个React组件!
78+
79+
80+
## JSX语法
81+
JSX代表JavaScript XML,是React代码中使用的一种类 XML 语法。
82+
使用JSX编写React元素:
83+
```jsx
84+
const element = <h1>Hello, world!</h1>;
85+
```
86+
这会被编译为:
87+
```js
88+
const element = React.createElement("h1", null, "Hello, world!");
89+
```
90+
JSX需要满足一些规则:
91+
- 组件名称以大写字母开头
92+
- 组合使用时要有一个根元素
93+
- 使用表达式需要放在花括号内
94+
例如:
95+
```jsx
96+
const name = "Josh Perez";
97+
const element = <h1>Hello, {name}</h1>;
98+
99+
const element = (
100+
<div>
101+
<h1>Hello!</h1>
102+
<h2>Good to see you.</h2>
103+
</div>
104+
);
105+
```
106+
编译后分别为:
107+
```js
108+
const name = "Josh Perez";
109+
const element = React.createElement("h1", null, "Hello, ", name);
110+
111+
const element = React.createElement("div", null,
112+
React.createElement("h1", null, "Hello!"),
113+
React.createElement("h2", null, "Good to see you."));
114+
```
115+
总之,JSX非常方便我们在JavaScript代码中编写和组合UI元素。
116+
117+
## React组件
118+
组件允许你将UI分割为独立的,可重用的代码片段。
119+
## React Hooks
120+
Hooks是 React 16.8的新增特性,它可以让你在不编写 `class` 的情况下使用 `state` 以及其他的 React 特性。
121+
我们可以使用了Hooks,比如 `useState`:
122+
```jsx
123+
import React, { useState } from 'react';
124+
125+
function Example() {
126+
const [count, setCount] = useState(0);
127+
128+
return (
129+
<div>
130+
<p>You clicked {count} times</p>
131+
<button onClick={() => setCount(count + 1)}>
132+
Click me
133+
</button>
134+
</div>
135+
);
136+
}
137+
```
138+
`useState` 是允许你在函数组件中添加 `state` 的 Hook。
139+
除此之外,还有其他常用的Hook,如:
140+
- useEffect - 执行副作用操作
141+
- useContext - 使用上下文
142+
- useReducer - 进行状态管理
143+
- useCallback - 缓存函数实例
144+
- ......
145+
Hooks让你在无需修改组件结构的情况下复用状态逻辑。
146+
......
147+
[文章续] 详细解释其他React Hooks的用法和目的。
148+
## React Router
149+
React Router 是一个 React 中的路由工具包。让你可以轻松地实现 React 应用的路由和导航。
150+
例如:
151+
```jsx
152+
import { BrowserRouter as Router, Switch, Route } from 'react-router-dom'
153+
154+
<Router>
155+
<Switch>
156+
<Route path="/" exact component={Home} />
157+
<Route path="/about" component={About} />
158+
<Route path="/topics" component={Topics} />
159+
</Switch>
160+
</Router>
161+
```
162+
- <Router> 是 React Router 的核心组件。
163+
- <Switch> 遍历所有<Route>元素并渲染第一个匹配的元素。
164+
- <Route> 代表路径和组件之间的映射关系。
165+
- exact 用于精确匹配路径。
166+
使用React Router可以轻松创建包含多个页面的单页Web应用程序。
167+
168+
## Redux
169+
Redux是一个状态管理工具,可以统一管理React应用的状态state。
170+
Redux工作流程:
171+
1. Store: 存放整个应用状态的对象,只能通过store.dispatch()进行状态更新
172+
2. State: Store对象包含的状态数据
173+
3. Action: 更新state的唯一方法是dispatch一个action,action是一个包含type字段的对象
174+
4. Reducer: 处理action,并返回新的state的纯函数
175+
5. dispatch: 将action发送给store的方法
176+
例如,我们有一个计数器Redux应用:
177+
```js
178+
// Define action types
179+
const INCREMENT = 'INCREMENT';
180+
const DECREMENT = 'DECREMENT';
181+
182+
// Define actions
183+
function increment() {
184+
return {
185+
type: INCREMENT
186+
}
187+
}
188+
189+
function decrement() {
190+
return {
191+
type: DECREMENT
192+
}
193+
}
194+
195+
// Define reducer
196+
function counterReducer(state = 0, action) {
197+
switch(action.type) {
198+
case INCREMENT:
199+
return state + 1;
200+
case DECREMENT:
201+
return state - 1;
202+
default:
203+
return state;
204+
}
205+
}
206+
207+
// Create store
208+
let store = Redux.createStore(counterReducer);
209+
210+
// Dispatch actions
211+
store.dispatch(increment());
212+
store.dispatch(increment());
213+
store.dispatch(decrement());
214+
215+
// Get state
216+
let state = store.getState(); // 2
217+
```
218+
我们定义INCREMENT和DECREMENT两个action类型,并创建对应的action creator生成action。
219+
然后编写counterReducer来根据action类型更新state。
220+
使用Redux.createStore()创建store,并dispatch action更新state。最终可以通过getState()读取状态。
221+
Redux通过这种规范化的流程管理状态,使应用的状态变化可预测,易调试。
222+
223+
## Axios
224+
Axios 是一个 HTTP 库,用来发送请求和接收响应。React应用常用Axios与后端API交互。
225+
例如,发送GET请求:
226+
js
227+
axios.get('/user?ID=10')
228+
.then(response => {
229+
console.log(response.data);
230+
})
231+
.catch(err => {
232+
console.log(err);
233+
});
234+
发送POST请求:
235+
js
236+
axios.post('/user', {
237+
firstName: 'Fred',
238+
lastName: 'Flintstone'
239+
})
240+
.then(res => {
241+
console.log(res);
242+
})
243+
.catch(err => {
244+
console.log(err);
245+
});
246+
Axios支持Promise API,所以您可以使用async/await:
247+
js
248+
async function getUser() {
249+
try {
250+
const response = await axios.get('/user?ID=10');
251+
console.log(response.data);
252+
} catch (err) {
253+
console.log(err);
254+
}
255+
}
256+
Axios有许多其他用法,可以完成复杂的请求,拦截响应,转换请求和响应数据等等。它是React应用中最常用的HTTP库之一。
257+
258+
之后在总结中总结一下React开发的主要流程和经验教训,帮助新手快速掌握React技能。
259+
260+
到此为止,我们大致介绍了React开发中的主要内容和流程。现在来简单总结一下:
261+
## React开发流程总结
262+
1. 配置开发环境 - 安装Node.js和Create React App脚手架
263+
2. 创建React项目 - 使用Create React App创建项目
264+
3. 了解项目结构 - 包括public、src、package.json等文件夹和文件
265+
4. 编写JSX和组件 - JSX用于编写UI元素和组件,组件用于划分独立可重用的代码块
266+
5. 管理状态 - 使用useState等Hooks或Redux管理组件和应用状态
267+
6. 实现路由 - 使用React Router配置路由并实现页面导航
268+
7. 调用API - 使用Axios与后端API交互,获取并更新数据
269+
8. 添加样式 - 使用CSS、SCSS或CSS in JS库为应用添加样式
270+
9. 测试 - 使用React Testing Library编写组件测试
271+
10. 发布 - 使用npm run build构建应用,并发布
272+
掌握了以上流程和内容,你已经具备打造一个中小规模React应用的技能。但React生态还有更多高级主题需要学习,我推荐以下资源帮助你进一步提高:
273+
- 阅读React官方文档
274+
- 通过社区分享教程进阶学习Hooks、Context等高级API
275+
- 研究Redux、Redux-saga、Dva等状态管理工具
276+
- 探索更多优秀的React UI库和组件
277+
- 了解SSR(服务端渲染)、代码分割和PWA等高级概念
278+
- ......
279+
React是一个强大而丰富的生态,希望本入门指南可以帮助你搭建概念和技能,在React的道路上走得更远。
280+
如果你有任何React学习方面的问题,也欢迎在评论区留言。我会在生活和工作之余予以解答,一起交流和进步!

0 commit comments

Comments
 (0)