• React入门


    React定位组件源码方法

    使用谷歌插件即可,非常好用!(么有vpn直接网上找资源就行)

    React Developer Tools

    React Inspector

    一、react开始

    1、react是什么

    用于构建用户界面的JavaScript库
    操作DOM呈现页面
    (发送请求获取数据和处理数据不由react处理)facebook开发

    2、为什么要学

    原生js操作DOM繁琐、效率低
    使用原生js直接操作DOM,浏览器会进行大量重绘重排
    原生js没有组件化编码方案,代码复用率低

    3、react特点

    采用组件化模式,声明式编码,提高开发效率及组件复用率
    在React Native中可以使用react语法进行移动端开发
    使用虚拟DOM+优秀的Diffing算法,尽量减少与真实DOM的交互

    4、JScript基础

    判断this指向
    class(类)
    ES6语法规范
    npm包管理器
    原型、原型链
    数组常用方法
    模块化

    二、使用

    1、引入下列三个js

    react.development.js
    react-dom.development.js
    babel.min.js

    2、创建DOM

    js方式创建虚拟DOM:
    React.createElement(标签名,标签属性,标签内容)创建虚拟DOM
    document.createElement()创建真实DOM
    jsx更简洁

    3、虚拟DOM

    本质是object类型的对象(一般对象)
    虚拟DOM属性少,真实DOM属性多,因为虚拟DOM是react内部在用,无需真实DOM上的那么多属性
    虚拟DOM最终会被react转化为真实DOM,呈现在页面上

    4、jsx

    js+xml,属于JScript的扩展
    定义虚拟DOM不写引号
    标签中混入js表达式要用{}
    样式的类名指定不用class用className
    内联样式,用style={{key:value}}
    只有一个根标签
    标签必须闭合

    5、组件

    函数式组件首字母大写
    类式组件
    类中的构造器非必写,

    6、组件实例的三大核心属性

    state(状态):状态不可直接更改,须用setState()更新
    render中的this为组件实例对象
    props:组件外传值与批量传值
    可以加属性规则
    函数式组件只能使用props属性,除非使用hooks
    refs:类似原生的元素id,refs为一组ref值;
    字符串形式的ref存在效率问题,已经弃用;
    回调函数形式的ref,(如果内置函数则执行两次,第一次为null)
    createRef用多少创建多少

    7、react事件处理

    8、收集表单数据

    受控组件与非受控组件

    9、高阶函数–函数柯里化

    10、组件的生命周期

    常用的生命周期函数
    didMount
    render
    willUnmount
    新版生命周期新增的两个生命周期:
    getDerivedStateFromProps()、getSnapshotBeforeUpdate()

    11、DOM的Diff算法

    虚拟DOM中唯一标识key的作用
    破坏顺序时可能错位,引起效率问题,可使用id等唯一值代替

    12、react脚手架

    借助webpack
    react+webpack+es6+eslint
    模块化、组件化、工程化

    13、样式的模块化

    14、组件化编码

    拆分组件
    实现静态组件
    实现动态组件(初始化数据,交互)

    15、组件传值

    父传子:props
    子传父:父组件先用props传函数给子组件,接着子组件调此函数传值給父组件即可
    状态state在哪里,操作state的方法就在哪

    16、react ajax

    建议使用轻量级axios,已经封装xmlhttprequest
    使用ajax会产生跨域,需要代理解决(package.json文件配置单个proxy)
    配置多个代理在SRC根文件新建setupProxy.js(http-proxy-middleware)

    17、兄弟(或任意)组件传值

    消息订阅-发布机制(PubSubjs)
    先订阅,再发布
    需要在componentWillUnmount中取消订阅

    18、发送请求方式

    xhr:设计粗糙的API,不符合关注分离原则
    fetch:原生函数,有的老版本浏览器不支持,不常用

    19、单页面应用SPA(路由)

    20、前端路由

    BOM(history)HTML5新增的historyAPI

    21、react路由(react-router-dom)

    ①一级路由
    link
    NvLink(通过this.prps.children可以拿到标签体内容)
    Switch单一匹配,path与component一一对应
    ②路由的精准匹配和模糊匹配
    Redirect Redirect重定向(最下方)
    二级路由(嵌套路由)
    ③子级路由需要加父级路由path

    向路由组件传递参数

    ④向路由组件传递params参数(声明,接收,在props取)this.props.location.params
    ⑤向路由组件传递search参数(不用声明,正常注册路由,在props取,最后借助querystring解析)this.props.location
    ⑥向路由组件传递state参数(不用声明,正常注册路由(路由对象),在props取)this.props.location.state
    路由栈的push(默认)与replace(按需开启)模式

    编程式路由

    利用this.props.history对象里的API前进回退
    withRouter可以加工一般组件加,让其拥有路由组件所具有的API

    BrowserRouter与HashRouter

    底层原理:
    BrowserRouter封装了HTML5提供的historyAPI
    HashRouter使用的是URL的哈希值
    path:
    BrowserRouter不带#;HashRouter带了#
    刷新后对路由state的影响:
    BrowserRouter不影响,state保存在history对象中;
    HashRouter刷新后会导致路由state参数丢失

    22、UI(antd)

    ANT-Design

    三、redux

    专门用于状态管理的js库
    集中式管理多个组件共享的状态
    在这里插入图片描述
    同步action:object一般对象
    异步action:function函数,即action的返回值为函数(需要引入redux-thunk支持异步action),一般异步action中会调用同步action
    在这里插入图片描述

    react-redux

    在这里插入图片描述
    优化
    在这里插入图片描述

    前端打包

    本地serve build模拟服务器,部署打包后的资源浏览器查看

    react状态更新是异步(两种形式)

    在这里插入图片描述

    react路由组件的lazyload

    react函数式组件的hooks

    React.useState()可以使用state

    在这里插入图片描述

    React.useEffect()可以模拟使用生命周期钩子

    在这里插入图片描述

    React.useRef()

    在这里插入图片描述

    React中Fragment

    Fragment标签可在编译时忽略该节点

    React中Context

    一种组件间通信方式,祖组件和后代组件通信
    需要引入provider和consumer

    React中PureComponent

    重写了shouldComponentUpdate,提升了性能

    React中render props

    在这里插入图片描述

    React中errorBoundary

    错误边界,一般在父组件使用
    在这里插入图片描述

    React中组件通信方式

    在这里插入图片描述

    React router 6

    已推荐使用函数式组件
    有很多开箱即用的API,如:
    useParams()
    useSearchParams()
    useLocation()
    等!

    在这里插入图片描述

  • 相关阅读:
    进化算法、遗传编程和学习
    Jenkins的job远程触发另一个Jenkins上的job
    Java多态
    关于WPF template使用FindName查找控件方法问题。
    Word处理控件Aspose.Words功能演示:使用Java合并MS Word文档
    基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
    树莓派4b配置通过smbus2使用LCD灯
    思腾合力GPU服务器
    蓝桥杯-递增三元组(三种解法,二分, 双指针, 前缀和)
    探索APP性能优化之稳定性优化(解决方案)
  • 原文地址:https://blog.csdn.net/qq_48314377/article/details/132849038