# react_staging_201125
**Repository Path**: tianyucoder/react_staging_201125
## Basic Information
- **Project Name**: react_staging_201125
- **Description**: tianyucoder/react_staging_201125
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2021-03-16
- **Last Updated**: 2022-03-22
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## 1.脚手架自带文件
public ---- 静态资源文件夹
favicon.icon ------ 网站页签图标 --------- 最好有
index.html -------- 主页面 -----------必须
logo192.png ------- logo图
logo512.png ------- logo图
manifest.json ----- 应用加壳的配置文件
robots.txt -------- 爬虫协议文件
src ---- 源码文件夹
App.css -------- App组件的样式
App.js --------- App组件 ---------------必须有
App.test.js ---- 用于给App做测试
index.css ------ 样式
index.js ------- 入口文件 --------------入口文件
logo.svg ------- logo图
reportWebVitals.js
--- 页面性能分析文件(需要web-vitals库的支持)
setupTests.js
---- 组件单元测试的文件(需要jest-dom库的支持)
## 2.一个简单的Weather组件
1.所有组件有一个外壳组件 —— App
2.除了App组件,所有其他的组件要放在components文件夹中
3.components文件夹结构:一个组件就是一个文件夹,文件夹中包含:结构、样式等等
即:components:
Weather:
index.jsx 或 Weather.jsx
index.css 或 Weather.css
## 3.状态提升
1.如果状态是某个组件用,则直接放在自身的state中
2.如果状态是某些组件用,则放在他们共同的父组件中
3.状态在哪里,操作状态的方法就在哪里
## 4.TodoList案例
(1).拆分组件时,要拆到位,结构、样式都要拆。
(2).组件化编码流程:
1. 拆分组件: 根据功能抽取组件
2. 实现静态组件: 使用组件实现静态页面效果
3. 实现动态组件
3.1 动态显示初始化数据
3.1.1 数据类型
3.1.2 数据名称
3.1.2 保存在哪个组件?
3.2 交互(从绑定事件监听开始)
(3).src/App.css放程序员写的公共样式
(4).public/css/bootstrap.css放成型的第三方公共样式
(5).关于react中的checked属性与defaultChecked
1.checked属性,时时刻刻起作用,而且必须配合disabled或onChange使用,否则就不能改了。
2.defaultChecked属性,只起一次作用,可以单独使用 (不建议使用)
(6).关于父子之间通信:
1.【父组件】给【子组件】传递数据:通过props传递
2.【子组件】给【父组件】传递数据:通过props传递,要求父提前给子传递一个函数
(7).使用//eslint-disable-next-line可以临时关闭下一行的语法检查
(8).熟练使用数组的reduce方法
## 5.配置代理
参考配置代理文档【react脚手架配置代理.md】即可
## 6.github搜索案例
1.拆分静态组件,设计状态时要考虑全面,例如带有网络请求的组件,要考虑请求失败怎么办。
2.分析得知:Search组件负责搜索,List组件负责展示,状态要交给App
3.List组件不仅要展示用户信息,还要展示:欢迎词、loading、错误信息
4.在App中设计一个方法:getSearchInfo去更新App的状态,一个一个写太麻烦
5.批量的给List组件传递参数:
6.在List中用三目运算符进行连续判断,从而决定List组件展示什么
## 7.消息订阅与发布机制
1.先订阅,再发布(理解:有一种隔空对话的感觉)
2.适用于任意组件间通信
3.componentDidMount中订阅消息,要在组件的componentWillUnmount中取消订阅
## 8.路由的基本使用
1.明确好界面中的导航区、展示区
2.导航区的a标签改为Link标签
Demo
3.展示区写Route标签进行路径的匹配
4.的最外侧包裹了一个或
## 9.NavLink的使用
1.NavLink可以实现路由链接的高亮,通过activeClassName指定样式名
## 10.路由组件和一般组件的区别
1.使用方式不同:
(1).一般组件:靠程序员亲自写组件标签去渲染,例如:
(2).路由组件:靠路由器进行路径的匹配,从而渲染的
2.存放文件夹不同:
(1).一般组件:components
(2).路由组件:pages
3.收到的props不同
(1).一般组件:程序员写组件标签时传入了什么,那么props中的内容就是什么,例如:
(2).路由组件:会收到固定的几个props,如下:
history:
go: ƒ go(n)
goBack: ƒ goBack()
goForward: ƒ goForward()
location: {pathname: "/about", search: "", hash: "", state: null, key: "1f5ocf"}
push: ƒ push(path, state) //控制路由跳转
replace: ƒ replace(path, state) //控制路由跳转
location:
pathname: "/about"
search: "" //专门用于接收路由search参数
state: null // 专门用于接收路由state参数
match:
params: {} //专门用于接收路由params参数
path: "/about"
url: "/about"
## 11.路由的严格匹配与模糊匹配
1.默认使用的是模糊匹配
2.开启严格匹配:
3.一定要谨慎开启严格匹配模式,因为一旦开启严格匹配会造成该路由的所有子路由全部失效
## 12.多级路由的使用
注册二级路由时,必须包含一级路由的路径
## 13.路由传参
1.params参数(只能在路径中拼接进去,即:to只能写字符串)
通过路由链接携带参数:详情
注册路由(一定要声明接收!!!):
接收参数:this.props.match.params
2.search参数(可以路径中拼接,或把to写成对象,靠search属性传递)
通过路由链接携带参数:详情
注册路由(无需声明接收):
接收参数:this.props.location.search
备注:需要借助querystring进行解析
3.state参数(只能把to写成对象,靠state属性传递)
路由链接(携带参数):详情
注册路由(无需声明接收):
接收参数:this.props.location.state
## 14.Redirect的使用
1.一般写在所有路由注册的最下方,当所有路由都无法匹配时,跳转到Redirect指定的路由
2.具体编码:
## 15.HashRouter
1.兼容性相对好一些
2.路径包含#
3.不允许连续跳转两个相同的路由,从而导致state参数无法二次传递