1 Star 2 Fork 0

TongyaoZhang / react-comprehensive

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

1、项目搭建

1.1 路由基本使用

1.明确好界面中的导航区、展示区

2.导航区的a标签改为Link标签

<Link to="/xxxxx">Demo</Link>

3.展示区写Route标签进行路径的匹配

<Route path='/xxxx' component={Demo}/>

4.<App>的最外侧包裹了一个<BrowserRouter><HashRouter>

1.2 NavLink与封装NavLink

1.NavLink可以实现路由链接的高亮,通过activeClassName指定样式名

2.标签体内容是一个特殊的标签属性

3.通过this.props.children可以获取标签体内容

1.3 Switch的使用

1.通常情况下,path和component是一一对应的关系

2.Switch可以提高路由匹配效率(单一匹配,一旦匹配上就不继续往下匹配了)

1.4 路由的严格匹配与模糊匹配

1.默认使用的是模糊匹配(简单记:【输入的路径】必须包含要【匹配的路径】,且顺序要一致)

2.开启严格匹配:<Route exact={true} path="/about" component={About}/>

3.严格匹配不要随便开启,需要再开,有些时候开启会导致无法继续匹配二级路由

2、React 基本使用

2.1 JSX 基本使用

  • 变量、表达式
  • class style
  • 子元素和组件

2.2 条件判断

  • if else
  • 三元表达式
  • 逻辑运算符 && ||

2.3 列表渲染

  • map
  • key

2.4 事件

  • bind this
  • 关于 event 参数
  • 传递自定义参数

2.5 表单

  • 受控组件(表单的值受state影响)
  • input textarea select 用 value
  • checkbox radio 用 checked

2.6 组件使用

  • props传递数据
  • props传递函数
  • props类型检查

2.7 setState

  • 不可变值
  • 可能是异步更新
  • 可能会被合并

2.8 生命周期

  • 单组件生命周期
  • 父子组件生命周期,和 Vue 的一样

3、React 高级特性

3.1 函数组件

  • 纯函数,输入 props,输出 JSX
  • 没有实例,没有生命周期,没有 state
  • 没有扩展其他方法

3.2 非受控组件

  • ref
  • defaultValue defaultChecked
  • 手动操作 DOM 元素

使用场景

  • 必须手动操作 DOM 元素,setState 实现不了
  • 文件上传 <input type="file">
  • 某些富文本编辑器,需要传入 DOM 元素

受控组件 vs 非受控组件

  • 优先使用受控组件,符合 React 设计原则
  • 必须操作 DOM 时,再使用非受控组件

3.3 Portals

  • 组件默认会按照既定层次嵌套渲染
  • 如何让组件渲染到父组件以外?

使用场景

  • 父组件 overflow: hidden(父组件设置了 BFC )
  • 父组件 z-index 值太小
  • fixed 需要放在 body 第一层级

3.4 context

  • 公共信息(语言、主题)如何传递给每个组件?
  • 用 props 太繁琐
  • 用 redux 小题大做

3.5 异步组件

  • import()
  • React.lazy
  • React.Suspense

3.6 性能优化

  • 性能优化,永远都是面试的重点
  • 性能优化对于 React 更加重要
  • 回顾讲 setState 时重点强调的不可变值
  • shouldComponentUpdate( 简称 SCU )
  • PureComponent 和 React.memo
  • 不可变值 immutable.js

SCU 使用总结

  • SCU 默认返回 true,即 React 默认重新渲染所有子组件
  • 必须配合 “不可变值” 一起使用
  • 可先不用 SCU,有性能问题时再考虑使用

PureComponent 和 memo

  • PureComponent,SCU 中实现了浅比较
  • memo,函数组件中的 PureComponent
  • 浅比较已适用大部分情况(尽量不要深度比较)
function MyComponent(props){
    /* 使用 props 渲染 */
}
function areEqual(prevProps, nextProps){
    /*
    如果把 nextProps 传入 render 方法的返回结果与
    将 prevProps 传入 render 方法的返回结果一致则返回 true,
    否则返回 false
    */
}
export default React.memo(MyComponent, areEqual);

immutable.js

  • 彻底拥抱 “不可变值"
  • 基于共享数据(不是深拷贝),速度好
  • 有一定学习和迁移成本,按需使用
const map1 = Immutable.Map({a:1, b:2, c:3})
const map2 = map1.set('b', 50)
map1.get('b') // 2
map2,get('b') // 50

性能优化 - 小结

  • 面试重点,且涉及 React 设计理念
  • SCU PureComponent memo immutable.js
  • 按需使用 & state 层级

3.7 关于组件公共逻辑的抽离

  • mixin,已被 React 弃用
  • 高阶组件 HOC
  • Render Props

HOC vs Render Props

  • HOC:模式简单,但会增加组件层级
  • Render Props:代码简洁,学习成本较高
  • 按需使用

4、Redux

  • 和 Vuex 作用相同,但比 Vuex 学习成本高
  • 不可变值,纯函数
  • 面试常考

4.1 Redux 使用

  • 基本概念
    • store state
    • action
    • reducer
  • 单项数据流
    • dispatch(action)
    • reducer - > newState
    • subscribe 触发通知
  • react-redux
    • Provider
    • connect
    • mapStateToProps mapDispatchToProps
  • 异步 action
    • redux-thunk
    • redux-promise
    • redux-saga
  • 中间件

4.2 Redux 原理图

4.3 react-redux 模型图

5、React-router

  • 面试考点并不多(前提是熟悉React)
  • 路由模式(hash,H5 history),同 vue-router
  • 路由配置(动态路由、懒加载),同 vue-router

路由模式

toC 客户端一般 H5 history,toB 控制后台一般 hash

空文件

简介

React综合复习 展开 收起
JavaScript 等 3 种语言
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/tongyaozhang/react-comprehensive.git
git@gitee.com:tongyaozhang/react-comprehensive.git
tongyaozhang
react-comprehensive
react-comprehensive
master

搜索帮助