React全家桶学习笔记

这是一份全面的React全家桶学习笔记,涵盖了从React的基本认识、使用到高级特性如Virtual DOM、Redux和React-UI。笔记详细讲解了React组件化编程、生命周期、状态管理以及路由系统,还涉及了如何使用create-react-app创建项目,配置按需打包,并探讨了Redux在异步任务中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

React全家桶学习笔记

1. React 的基本认识

React用于构建用户界面的JS库
1.1 React 特点
    1. Declarative
    2. Component-Based
    3. Learn Once, Write Anywhere(支持客户端服务器渲染)
    4. 高效
        4.1 虚拟DOM,不总是直接操作DOM
        4.2 DOM Diff 算法,最小化页面重绘
    5. 单向数据流

2. 使用React

2.1 直接引入
    <script src="https://unpkg.com/react@16/umd/react.production.min.js" crossorigin></script>
    <script src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js" crossorigin></script>
    <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
2.2 JSX - JavaScript XML
    const v1 = React.createElement("h2", {id:myId.toLowerCase()}, msg.toUpperCase());
    const v2 = <h3 id={myId.toUpperCase()}>{msg.toLowerCase()}</h3>;
2.3 渲染DOM
    ReactDOM.render(v2, document.getElementById("test2"))
    ReactDOM.render(<Person {...p1} />, document.getElementById("test1"));

3. 模块和组件

3.1 模块就是一个js文件,具有特定功能
3.2 组件就是一个界面的局部功能模块 html+css+js+media

4. React 面向组件编程

面向对象 -> 面向模块 -> 面向组件

5. 组件三大属性

5.1 state
5.2 refs - 标识组件内部的元素
5.3 props

6. 添加绑定事件this的指向问题

6.1 构造函数中添加 this.handleClick = this.handleClick.bind(this)
6.2 箭头函数
6.3 onClick={this.handleClick.bind(this)} 效率低,因为每次都会重新渲染

7. 定义组件的两种方式

7.1 工厂模式 function (无状态组件)
7.2 组件类模式 class (有状态组件)

8. 默认属性值和属性类型和必要性的限制

Person.defaultProps = {
    sex:"male",
    age:18
}
自 React v15.5 起,React.PropTypes 已移入另一个包中。请使用 prop-types 库 代替
Person.propTypes = {
    name:PropTypes.string.isRequired,
    age:PropTypes.number,
    sex:PropTypes.string
}

9. … 剩余参数 打包和解包

const arr1 = [1, 2, 3]
const arr2 = [6, ...arr1, 9] -> [6, 1, 2, 3, 9]

10. 功能界面组件化编码流程

1. 拆分组件
2. 实现静态组件
3. 实现动态组件
    1. 动态显示初始化数据
    2. 交互功能

11. 表单组件的分类

1. 受控组件:表单项输入的数据自动收集成状态
2. 非受控组件:需要时才手动读取表单输入框的数据,操作DOM(读),写法简洁

12. 组件(对象)生命周期

constructor - 构造器
render - 渲染,只要重新渲染就要调用render
componentDidMount - 挂载完成
componentWillUnmount - 准备结束
第一次初始化
constructor -> componentWillMount -> render() -> componentDidMount
每次更新state
componentWillUpdate -> render() -> componentDidUpdate
移除组件
componentWillUnmount
ReactDOM.unmountComponentAtNode(document.getElementById('app')

13. 编程方式

1. 命名式编程 - 自己控制流程 jQuery
2. 声明式编程

14. Virtual DOM & Diff Algorithm

1. 创建虚拟DOM
2. 真实DOM树
3. 绘制界面显示
4. setState() 更新状态
5. 创建虚拟DOM树
6. 新旧比较差异
7. 更新差异对应的真实DOM

15. React CLI

dependencies - 运行依赖
    react
    react-dom
devDependencies - 开发依赖
    react-scripts
SPA - single page application

16. package.json

1. 标识 name/version
2. 依赖 dependencies/devDependencies 运行依赖和开发依赖
3. 运行命令

17. README.md markdown

应用说明文件

18. React应用(基于React脚手架)

  1. 使用create-react-app 创建react应用
  2. 项目整体技术架构 react+webpack+es6+eslint
  3. 脚手架开发项目的特点:模块化、组件化、工程化
    npm root -g
  4. live reload - 实时刷新
  5. 标签属性:静态属性在左,动态属性在右
  6. axios 请求
    1. axios - 轻量级,建议使用 promise 风格
    2. fetch - 原生函数,老版本不支持,引入兼容fetch.js
  7. 组件间通信
    1. props传递数据
      一般数据 父 -> 子
      函数数据 子 -> 父
    2. 消息订阅和发布机制 subscriber - publisher
      npm install pubsub-js --save
    3. Redux 全局状态管理
  8. react-router / react-ui
  9. SPA 单页面应用 - 局部刷新
  10. 路由系统实现
    npm i --save react-router-dom
    1. browser history push | pop | replace
    2. hash history



    history / match / withRouter 对象 1. 路由组件 2. 非路由组件 路由组件和非路由组件分开 路由组件 -> pages/views 文件 非路由组件 -> components 文件 嵌套路由 如何编写路由效果 1. 编写路由组件 2. 在父路由组件中指定 路由链接 - NavLink 路由 - Route 路由链接和非路由链接 - network 是否发请求
  11. react-ui
    1. material-ui
    2. ant-design

19. React-UI

  1. 按需打包
    npm install react-app-rewired customize-cra --save-dev
    npm install babel-plugin-import --save-dev
    在项目根目录创建一个 config-overrides.js
    const { override, fixBabelImports } = require(‘customize-cra’);
    module.exports = override(
    fixBabelImports(‘import’, {
    libraryName:‘antd-mobile’,
    style:‘css’,
    }),
    );

20. Redux

  1. application-level state manager
  2. npm install --save redux
  3. 核心API
    createStore
  4. store 对象
    1. 内部维护 state reducer
    2. 核心方法
      getState
      dispatch(action)
      subscribe(listener)
  5. redux 三个核心概念
    1. action
      type:“INCREMENT”
      data:数据属性
      Action Creater
      const increment = (number)=>({type:“increment”, data:number})
    2. reducer
      根据老的state和action产生新的state纯函数
      注意:返回新的状态
      不要修改原来的状态
    3. store
      将 state/action/reducer 联系在一起的管理对象
      createStore(reducer)
  6. react组件和redux耦合度高
    解决:react-redux
    npm i --save react-redux
    connect 连接组件和redux
    组件分类:UI组件、容器组件
    UI组件不使用redux API
    容器组件放在containers
    connect(
    mapStateToprops,
    mapDispatchToprops
    )
  7. redux 问题
    redux 默认是不能进行异步处理的
    应用中又需要在redux中执行异步任务(ajax, 定时器)
    解决:redux异步编程
    redux异步中间件
    npm install --save redux-thunk
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值