react 咻咻咻

# react 必知必会

1. 函数式组件(简单无状态场景) / class类式组件 (复杂有状态场景)
2. react思想:状态驱动UI
3. 组件实例三大核心:refs/props/state
4. class = function + hooks
5. this.state = {isHot:true}
   const isHot = this.state
# 1. hello world

<div id="example"></div>
<script type="text/babel">
  const vdom= <h1>Hello, world!</h1>;
  ReactDOM.render(vdom,document.getElementById('example'));
</script>

# 2. 函数式组件

# 3. 类组件

# 4. 函数和class组合场景

#  5. state 和 props
(我们可以在父组件中设置 state, 并通过在子组件上使用 props 将其传递到子组件上)
(https://www.runoob.com/react/react-props.html)

# 6. 切换按钮点击事件
(https://www.runoob.com/react/react-event-handle.html)

# 7. 事件传参
(https://www.runoob.com/react/react-event-handle.html)

# 8. 案例演示1
(事件是通过改变status状态来实现的,等同于通过变量param控制UI)

# 9. 表达式和html在{ }中混编
(true && expression 总是返回 expression,而 false && expression 总是返回 false)

# 10. 条件判断:三目运算

# 11. 阻止组件渲染

# 12. 列表渲染

# 13. key值传递
(如果要传递key值,需要借助id)
const content = posts.map((post) =>
  <Post
    key={post.id}
    id={post.id}
    title={post.title} />
);

# 14. 生命周期
(结果:
    Component WILL MOUNT!
    Component DID MOUNT!
    Component WILL RECEIVE PROPS!
    Component WILL UPDATE!
    Component DID UPDATE!
)

# 15. react请求数据更新status状态

# 16. form表单输入框变更监听

# 17. 下拉菜单提交

# 18. 输入框和单选

 ==============================华丽分割线==================================

# 1. 简洁版写法

# 2. props传递对象写法

# 其他 (复制person对象,并修改/添加name属性,之后合并内容)
let person2 = {...person,name:'cc'}

# 3. class类中限制props属性数据类型

# 注意
props是只读的

# 4. 字符串类型ref

# 5. 回调形式的ref (内联方式)

# 6. createRef (最新写法)

# 7. 表单提交 (非受控组件)

# 8. 表单提交 (受控组件:用到state状态)

# 10. 高阶函数/函数柯里化

# 11. 组件生命周期 (挂载阶段)

# 12. 生命周期

# 12.1. 旧版本 (16.8)

1. 初始化阶段: 由ReactDOM.render()触发---初次渲染
    1.constructor()
    2.componentWillMount()
    3.render()
    4.componentDidMount()
2. 更新阶段: 由组件内部this.setSate()或父组件重新render触发
    1.shouldComponentUpdate()
    2.componentWillUpdate()
    3.render()
    4.componentDidUpdate()
3. 卸载组件: 由ReactDOM.unmountComponentAtNode()触发
    1.componentWillUnmount()

# 12.2. 新版本 (17.2)

1. 初始化阶段: 由ReactDOM.render()触发---初次渲染
    1.constructor()
    2.getDerivedStateFromProps 
    3.render()
    4.componentDidMount()
2. 更新阶段: 由组件内部this.setSate()或父组件重新render触发
    1.getDerivedStateFromProps
    2.shouldComponentUpdate()
    3.render()
    4.getSnapshotBeforeUpdate
    5.componentDidUpdate()
3. 卸载组件: 由ReactDOM.unmountComponentAtNode()触发
    1.componentWillUnmount()

# 小结
新版本去掉三个生命周期:componentWillMount、componentWillReceiveProps、componentWillUpdate
增加了三个生命周期:getDerivedStateFromProps、getDerivedStateFromProps、getSnapshotBeforeUpdate
# 13. 插件

# 13.1. 前端跨域代理 (正向代理)

# 13.2. 兄弟组件之前传值 (消息订阅与发布机制)

# 13.3. fetch/axios 数据请求 (fetch:关注分离原则)

# 13.4. SPA 单页面,多组件,局部刷新
# 14. react-router

# 概念

# 14.1. 什么是路由
1.	一个路由就是一个映射关系(key:value)
2.	key为路径, value可能是function或component
3. function为后端路由,component为前端路由

# 14.2. 路由分类
1.	后端路由:
1)	理解: value是function, 用来处理客户端提交的请求。
2)	注册路由: router.get(path, function(req, res))
3)	工作过程:当node接收到一个请求时, 根据请求路径找到匹配的路由, 调用路由中的函数来处理请求, 返回响应数据
2.	前端路由:
1)	浏览器端路由,value是component,用于展示页面内容。
2)	注册路由: <Route path="/test" component={Test}>
3)	工作过程:当浏览器的path变为/test时, 当前路由组件就会变为Test组件

# 14.3. 前端路由原理
前端路由依靠浏览器的历史记录history实现

# 14.4. react-router分类
1. web端使用 (react-router-dom)
2. native端使用
3. any任何都可以使用

# 14.5. 路由基本使用
1. 场景:点击左侧导航区,展示区内容切换
2. 导航区:<Link to="/xx">Demo</Link>
3. 展示区:<Route path="/xx" component={Demo} />
4. 主程序入口:<APP>最外层包裹一个<BrowserRouter>或<HashRouter>
15. 路由组件与一般组件的区别

# 16. NavLink使用

注意:<NavLink>是<Link>的一个特定版本,会在匹配上当前的url的时候给已经渲染的元素添加参数

小结:Navlink为link增加了几个渲染属性 (选中样式)

 

# 17. 包装自定义组件 (MyNavLink组件)

# 18. switch标签 (当查找到目标路由后立即结束匹配)

# 19. 初始化默认路由选项

# 20. react-route嵌套路由

# 21. 向路由组件传递参数的三种方式

1. params参数
携带参数:<Link to='/demo/test/tom/18'>详情</Link>
声明接收:<Route path='/demo/test/:name/:age' component={Test}/>
接收参数:const {name,age} = this.props.match.params

2. search参数
携带参数:<Link to='/demo/test?name=tom&age=18'>详情</Link>
注册路由(无需声明,正常注册即可):<Route path='/demo/test' component={Test}/>
接受参数:const {search} = this.props.location.search
注意:search是unicode编码,需要借助querystring第三方工具包来解析

3. state参数
携带参数:<Link to={{path='/demo/test',state:{name:'tom',age:18}}}>详情</Link>
注册路由(无需声明,正常注册即可):<Route path='/demo/test' component={Test}/>
接受参数:const {search} = this.props.location.state

 

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值