React回顾

 一、基础

 1、使用babel解析

2、不直接使用jsx,jsx写起来很繁琐

3、jsx语法规则

4、函数式组件的使用

 5、函数式组件渲染

6、类组件渲染

7、类组件中事件调用this指向问题

8、类组件不能直接改变状态

 

9、props接收数据类型限制

 类型限制放到类组件内部,用static关键字

 10、ref的使用

 字符串ref:不推荐使用

回调ref(内联函数),更新会执行两次,第一次参数为null,第二次才是dom,这个无关紧要。

要想只执行一次,就不能写成内联函数,要把函数写到类上,用this调用才行;

createRef的使用

react改写了原生的事件分析:

 11、jsx注释

12、受控组件与非受控组件

受控组件:组件内有状态存储变量

非受控组件:表单的值现用现取

13、高阶函数、函数柯理化

14、生命周期函数(旧)

15、生命周期函数(新)

相比旧版新增了2个,删除了3个

 getSnapshotBeforeUpdate钩子的应用场景

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
  <script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
  <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
  <script src="https://cdn.bootcdn.net/ajax/libs/prop-types/15.8.1/prop-types.js"></script>
</head>
<style>
  .list{
    width: 200px;
    height: 150px;
    background-color: skyblue;
    overflow: auto;
  }
  .news{
    height:30px;
  }
</style>
<body>
  <div id="app"></div>
  <script type="text/babel">
    class MyDom extends React.Component{
      state = {newsArr:[],mouseType:false}
      mouseIn=()=>{
        console.log('aa')
        this.setState({mouseType:true})
      }
      mouseOut=()=>{
        console.log('bb')
        this.setState({mouseType:false})
      }
      componentDidMount(){
        // console.log('componentDidMount')
        setInterval(()=>{
          const {newsArr} = this.state;
          const news = '新闻'+(newsArr.length+1)
          this.setState({newsArr:[news,...newsArr]})
        },1000)
      }

      getSnapshotBeforeUpdate(){
        // console.log('getSnapshotBeforeUpdate')
        return this.refs.list.scrollHeight;
      }

      componentDidUpdate(preProps,preState,height){
        // console.log('组件更新完成','componentDidUpdate');
        if(this.state.mouseType){
          this.refs.list.scrollTop+=this.refs.list.scrollHeight-height;
        }else{
          this.refs.list.scrollTop = 0
        }
   
      }

      render(){
        // console.log('render函数')
        const arr = this.state.newsArr.map((item,index)=>{
          return <div className="news" key={index}>{item}</div>
        })
        return (
          <div className="list" ref="list" onMouseOver={this.mouseIn} onMouseLeave={this.mouseOut}>
            {arr}
          </div>
        )
      }
      
    }

    ReactDOM.render(<MyDom/>,document.getElementById("app"))
  </script>
</body>
</html>

16、脚手架介绍

17、好用的快捷键插件介绍

ES7 React/Redux/GraphQL/React-Native snippets

// ES7 React/Redux/GraphQL/React-Native snippets 快捷键

// rcc  类组件

// rfc 函数组件

// imrc 引入react

18、react跨域方式

1、跨域方案放在package.json文件中;

"proxy": "http://localhost:5000"

2、跨域方案 在src目录下新建setupProxy.js文件;

17版本与18版本有一点区别,截图是17版本,代码是18版本;

const {createProxyMiddleware} = require('http-proxy-middleware');
module.exports = function (app) {
  app.use(
    createProxyMiddleware('/api1', {
      target: 'http://localhost:5000',
      changeOrigin: true, // 控制服务器接收到的请求头中host字段的值
      pathRewrite:{'^/api1':''}
    }),
    createProxyMiddleware('/api2', {
      target: 'http://localhost:5001',
      changeOrigin: true, // 控制服务器接收到的请求头中host字段的值
      pathRewrite:{'^/api2':''}
    }),

  )
}

18、连续解构赋值

连续解构赋值并重命名

19、搜索过滤练习

后端接口cors解决跨域问题

请求地址:api.github.com/search/users?q=ty

20、消息发布订阅模式

B和C是兄弟组件,使用pubsub-js实现兄弟间传递消息

// 组件B
import React, { Component } from 'react';
import PubSub from 'pubsub-js';
import sty from './index.module.css';

export default class B extends Component{
   //组件B发布消息
  pushMsg = () => {
    PubSub.publish('toTy',{name:'ty',age:20})
  }
  render () {
    return <div>
      <div className={sty.color}>React</div>
      <button onClick={this.pushMsg }>发布消息</button>
    </div>
  }
}
// 组件C
import React, { Component } from 'react';
import Pubsub from 'pubsub-js'
import sty from './index.module.css';

export default class B extends Component{

  componentDidMount () {
    // 组件C订阅消息
    this.token = Pubsub.subscribe('toTy', (msg,data) => {
      console.log(1,msg,data)
    })
  }
  componentWillUnmount () {
    // 组件C取消订阅消息
    Pubsub.unsubscribe(this.token);
  }
  render () {
    return <div>
      <div className={sty.color}>,你好</div>
    </div>
  }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/414840.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

StarRocks实战——滴滴OLAP的技术实践与发展方向

原文大佬的这篇StarRocks实践文章整体写的很深入&#xff0c;介绍了StarRocks数仓架构设计、物化视图加速实时看板、全局字典精确去重等内容&#xff0c;这里直接摘抄下来用作学习和知识沉淀。 目录 一、背景介绍 1.1 滴滴OLAP的发展历程 1.2 OLAP引擎存在的痛点 1.2.1 运维…

IOC 和 AOP

IOC 所谓的IOC&#xff08;inversion of control&#xff09;&#xff0c;就是控制反转的意思。何为控制反转&#xff1f; 在传统的程序设计中&#xff0c;应用程序代码通常控制着对象的创建和管理。例如&#xff0c;一个对象需要依赖其他对象&#xff0c;那么它会直接new出来…

express+mysql+vue,从零搭建一个商城管理系统6--数据校验和登录

提示&#xff1a;学习express&#xff0c;搭建管理系统 文章目录 前言一、修改models/user.js二、修改routes下的user.js三、Api新建user/login接口四、删除数据库原有数据&#xff0c;添加新验证规则的用户四、用户登录总结 前言 需求&#xff1a;主要学习express&#xff0c;…

【Linux】基础篇-Linux四种环境搭建的方式(详细安装说明步骤,搭载下载安装地址)

目录 1. 使用虚拟机&#xff08;推荐VMware&#xff09;centos 7版本 1.1VMware虚拟机下载 1.2VMware 安装 1.3centos-7 清华大学镜像下载 1.4 centos-7 清华大学镜像导入虚拟机VMware 2.使用虚拟机ubuntu 20.04版本 2.1虚拟机下载同上 2.2虚拟机安装同上 2.3ubunt…

ROS-Ubuntu 版本相关

ROS-Ubuntu 版本相关&#xff1a;安装指引 年代ROS1版本Ubuntu 版本2014Indigo14.042016Kinetic16.042018Melodic18.042020Noetic20.04 & 22.04 ROS2兼顾了工业使用上的问题。 年代ROS2版本Ubuntu 版本2022Humble20.04 & 22.042023Iron16.04 相关参考&#xff1a; […

【Qt 学习之路】使用 cmake 在Windows上 编译 ZeroMQ

文章目录 1、概述2、编译2.1、用 Visual Studio 的解决方案方式2.1.1、找到 Builds 文件夹2.1.2、查看 deprecated-msvc 下的 libzmq.sln 文件2.1.3、使用 Visual Studio 打开 libzmq.sln 解决方案2.1.4、修改 libzmq.import.props 文件2.1.5、编译生成 2.2、用 C 的cmake方式2…

【前端入门】设计模式+单多页+React

设计模式是一种解决特定问题的经验总结&#xff0c;它提供了经过验证的解决方案&#xff0c;可以在软件开发过程中使用。设计模式可以帮助前端开发人员更有效地组织和管理代码&#xff0c;并提供一种共享的语言和框架&#xff0c;以便与其他开发人员进行交流。 以下是一些常见…

十二、Qt自定义Widget组件、静态库与动态库

一、自定义Widget组件 1、自定义Widget组件 使用步骤采用提升法&#xff08;promotion&#xff09;重新定义paintEvent事件 2、实现程序 &#xff08;1&#xff09;创建项目&#xff0c;基于QWidget &#xff08;2&#xff09;添加类&#xff0c;为Widget组件提升类 #inclu…

Delegate(P29 5.5delegate)

一、Delegate简介 每个代理都可以访问许多附加的属性&#xff0c;其中一些来自数据模型&#xff0c;另一些来自视图。 从模型中&#xff08;Model&#xff09;&#xff1a;属性将每个项目的数据传递给 delegate。 从视图中&#xff08;View&#xff09;&#xff1a;属性将状…

dcat admin 自定义页面

自定义用户详情页 整体分为两部分&#xff1a;用户信息、tab框 用户信息采用自定义页面加载&#xff0c;controller代码如下&#xff1a; protected function detail($id) {return Show::make($id, GameUser::with(finance), function (Show $show) {// 这段就是加载自定义页面…

pdf怎么合并在一起?

pdf怎么合并在一起&#xff1f;在日常工作和学习中&#xff0c;我们常常需要处理大量的PDF文件。有时候&#xff0c;我们可能希望将多个PDF文件合并成一个文件&#xff0c;以便于管理和分享。这时候&#xff0c;PDF文件合并工具就能派上用场了。PDF文件合并是一种将多个PDF文件…

MySQL 事务原理分析

事务 前提&#xff1a;有并发连接。定义&#xff1a;事务是用户定义的一系列操作&#xff0c;这些操作要么都做&#xff0c;要么都不做&#xff0c;是一个不可分割的单位。目的&#xff1a;事务将数据库从一种一致性状态转换为另一种一致性状态&#xff0c;保证系统始终处于一…

【数据结构】从链表到LinkedList类

&#x1f9e7;&#x1f9e7;&#x1f9e7;&#x1f9e7;&#x1f9e7;个人主页&#x1f388;&#x1f388;&#x1f388;&#x1f388;&#x1f388; &#x1f9e7;&#x1f9e7;&#x1f9e7;&#x1f9e7;&#x1f9e7;数据结构专栏&#x1f388;&#x1f388;&#x1f388;&…

NerfStudio安装及第一个场景重建

NerfStudio文档是写在windows和linux上安装&#xff0c;本文记录Linux安装的过程&#xff0c;且我的cuda是11.7 创建环境 conda create --name nerfstudio -y python3.8 conda activate nerfstudio python -m pip install --upgrade pip Pytorch要求2.0.1之后的,文档推荐cud…

JavaWeb——005 请求响应 分层解耦(Postman、三层架构、IOC、DI、注解)

SpringBootWeb请求响应 这里写目录标题 SpringBootWeb请求响应前言1. 请求1.1 Postman1.1.1 介绍1.1.2 安装 1.2 简单参数1.2.1 原始方式1.2.2 SpringBoot方式1.2.3 参数名不一致 1.3 实体参数1.3.1 简单实体对象1.3.2 复杂实体对象 1.4 数组集合参数1.4.1 数组1.4.2 集合 1.5 …

产品老化试验目的、用途

什么是老化试验&#xff1f; 老化试验是通过模拟产品在使用过程中的老化情况&#xff0c;来评估产品在长期使用后的性能和可靠性。这种测试可以帮助制造商了解产品的寿命和耐久性&#xff0c;以及产品在不同环境条件下的表现。 模拟量采集/老化房采集软件 为什么需要进行老化试…

【Leetcode每日一刷】贪心算法01:455.分发饼干、376. 摆动序列、53. 最大子序和

博主简介&#xff1a;努力学习和进步中的的22级计科生博主主页&#xff1a; Yaoyao2024每日一句: “ 路虽远&#xff0c;行则将至。事虽难&#xff0c;做则可成。” 文章目录 前言&#xff1a;贪心算法一、455.分发饼干二、376. 摆动序列三、53. 最大子序和 前言&#xff1a;贪…

挑战杯 基于机器视觉的图像拼接算法

前言 图像拼接在实际的应用场景很广&#xff0c;比如无人机航拍&#xff0c;遥感图像等等&#xff0c;图像拼接是进一步做图像理解基础步骤&#xff0c;拼接效果的好坏直接影响接下来的工作&#xff0c;所以一个好的图像拼接算法非常重要。 再举一个身边的例子吧&#xff0c;…

信号系统之切比雪夫过滤器

1 切比雪夫和巴特沃斯的响应 切比雪夫响应是一种数学策略&#xff0c;通过允许频率响应中的纹波来实现更快的滚降。使用这种方法的模拟和数字滤波器称为切比雪夫滤波器。这些滤波器因使用切比雪夫多项式而得名&#xff0c;切比雪夫多项式由俄罗斯数学家帕夫努蒂切比雪夫&#…

基于FPGA的9/7整数小波变换和逆变换verilog实现,包含testbench

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 9/7整数小波变换原理 4.2 逆变换过程 5.算法完整程序工程 1.算法运行效果图预览 将测试结果导入到matlab显示 2.算法运行软件版本 vivado2019.2&#xff0c;matlab2022a 3.部分核心程…