Skip to content

Commit f180928

Browse files
author
刘倩玉
committed
【修改】readme
1 parent d33f819 commit f180928

File tree

6 files changed

+64
-8
lines changed

6 files changed

+64
-8
lines changed

README.md

Lines changed: 64 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,61 @@
1-
### 记录
1+
## React练手项目-todolist
2+
### 所用技术
3+
框架:React
4+
路由:react-router@V4
5+
图标:font-awesome
6+
7+
### 项目结构
8+
```
9+
.
10+
├── README.md
11+
├── build
12+
├── package-lock.json
13+
├── package.json
14+
├── public
15+
│   ├── favicon.ico
16+
│   ├── index.html
17+
│   └── manifest.json
18+
├── src
19+
│   ├── App.css
20+
│   ├── App.js //主页面
21+
│   ├── App.test.js
22+
│   ├── component
23+
│   │   ├── AddTodo.css
24+
│   │   ├── AddTodo.js //新增todo组件
25+
│   │   ├── TodoDetail.css
26+
│   │   └── TodoDetail.js //todo详情组件
27+
│   ├── index.css
28+
│   ├── index.js //页面入口
29+
│   └── registerServiceWorker.js
30+
└── yarn.lock
31+
32+
8 directories, 31 files
33+
34+
```
35+
36+
### overview
37+
![](src/pics/[email protected]){:width="50%"}
38+
![](src/pics/[email protected])
39+
![](src/pics/[email protected])
40+
![](src/pics/[email protected])
41+
![](src/pics/[email protected])
42+
## 如何运行
43+
44+
### 安装
45+
$npm install
46+
47+
### 启动
48+
$npm start
49+
50+
51+
### 项目记录
252
- npm全局安装的模块放在 /usr/local/lib/node_modules/ 目录下
353
- 不要直接对state进行修改,例如数组的一些方法会直接修改原数组
454
- react-router4.*版本使用browerHistory的方法:[https://github.com/brickspert/blog/issues/3](https://github.com/brickspert/blog/issues/3)
555
- 安装history[https://github.com/ReactTraining/history](https://github.com/ReactTraining/history)
656
```
7-
const history = createHistory({
8-
forceRefresh: true,
57+
const history = createHistory({
58+
forceRefresh: true,
959
})
1060
```
1161
这样可以方便使用history,但页面跳转时是自动刷新的;
@@ -16,14 +66,20 @@
1666
- 划分组件时,由于各个组件之前是有联系的,即 可能相互传数据,如果把其纳入一个组件会减少组件间通信,但是又会让组件显得在UI上划分不合理。如何做一个平衡?
1767

1868
### 项目逻辑
19-
1. 组件划分
69+
1. 组件划分(根据UI)
2070
2. 状态state考虑(涉及到页面数据展示和页面变化)
2171
1)页面展示的数据需要state来维护,即todo数组,数组每个对象会维护多个属性;
2272
2)页面task,completed,active图标和相关todolist的展示,可以用一个状态来维护,即classify,这样可以同时控制图标的展示和相应todolist的展示;
23-
3) 状态isAdd,表示是否新增todo,控制css类名变化,即控制页面的显示;
73+
3) 状态isAdd,表示是否新增todo,控制css类名变化,即控制页面的显示;
74+
3. 路由
75+
页面路由采用react-router@V4,即不同UI组件的显示,就需要路由,而页面底部页面task,completed,active图标三种界面显示,都是相同组件源,可用state控制其显示,就不用路由。
76+
涉及路由的页面:todos清单页面 / 增加todo页面 / 单个todo详情页面
77+
路由思路:将三个页面放在主页面Router的Route组件下,设置其path,当页面发生点击事件时,利用history修改path,react-router便会根据页面的path无刷新跳转相应组件
78+
4. 涉及state的逻辑处理
79+
将todo对象数组的所有状态维护在主页面,由于这些状态会在三个路由页面进行状态交互,所以维护在共同祖先组件,便于通信。在子组件中绑定元素的响应事件,通知到主页面进行state的更新,同时更新本地化存储localStorage。
2480

2581
### 踩坑
26-
1. 描述:history.push之后页面路径会变化,但没有跳转。所以加了forceRefresh:true的初始化参数,强制每次路径变化刷新页面。这样页面就才会有刷新。
27-
解决方法:主要我之前采用的import { BrowserRouter as Router } 加 ```<Router></Router>```的方式,现在采用```<Router history={history}></Router>```这种方式,就可以默认跳转了。
28-
82+
1. 描述:history.push之后页面路径会变化,但没有跳转。所以加了forceRefresh:true的初始化参数,强制每次路径变化刷新页面。这样页面就才会有刷新。
83+
解决方法:主要我之前采用的import { BrowserRouter as Router } 加 ```<Router></Router>```的方式,现在采用```<Router history={history}></Router>```这种方式,就可以默认跳转了。
84+
2985

src/pics/[email protected]

98.8 KB
Loading

src/pics/[email protected]

80.7 KB
Loading

src/pics/[email protected]

72.6 KB
Loading

src/pics/[email protected]

86.3 KB
Loading

src/pics/[email protected]

68.7 KB
Loading

0 commit comments

Comments
 (0)