Young Kbt blog Young Kbt blog
首页
  • java基础

    • Java基础
    • Java集合
    • Java反射
    • JavaJUC
    • JavaJVM
  • Java容器

    • JavaWeb
  • Java版本新特性

    • Java新特性
  • SQL 数据库

    • MySQL
    • Oracle
  • NoSQL 数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • ActiveMQ
    • RabbitMQ
    • RocketMQ
    • Kafka
  • 进阶服务

    • Nginx
  • Spring
  • Spring Boot
  • Spring Security
  • 设计模式
  • 算法
  • 知识
  • 管理

    • Maven
    • Git
  • 部署

    • Linux
    • Docker
    • Jenkins
    • Kubernetes
  • 进阶

    • TypeScript
  • 框架

    • React
    • Vue2
    • Vue3
  • 轮子工具
  • 项目工程
  • 友情链接
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 收藏
    • 关于
    • Vue2-Admin (opens new window)
    • Vue3-Admin(完善) (opens new window)
GitHub (opens new window)

Shp Liu

朝圣的使徒,正在走向编程的至高殿堂!
首页
  • java基础

    • Java基础
    • Java集合
    • Java反射
    • JavaJUC
    • JavaJVM
  • Java容器

    • JavaWeb
  • Java版本新特性

    • Java新特性
  • SQL 数据库

    • MySQL
    • Oracle
  • NoSQL 数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • ActiveMQ
    • RabbitMQ
    • RocketMQ
    • Kafka
  • 进阶服务

    • Nginx
  • Spring
  • Spring Boot
  • Spring Security
  • 设计模式
  • 算法
  • 知识
  • 管理

    • Maven
    • Git
  • 部署

    • Linux
    • Docker
    • Jenkins
    • Kubernetes
  • 进阶

    • TypeScript
  • 框架

    • React
    • Vue2
    • Vue3
  • 轮子工具
  • 项目工程
  • 友情链接
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 收藏
    • 关于
    • Vue2-Admin (opens new window)
    • Vue3-Admin(完善) (opens new window)
GitHub (opens new window)
  • 超文本标记语言 - Html

  • 解释编程语言 - JavaScript

  • JS 超集语言 - TypeScript

  • 界面构建框架 - React

    • React - 基础与核心
    • React - 脚手架及使用
      • 创建脚手架
      • todoList案例相关知识点
      • github搜索案例相关知识点
      • 脚手架配置代理
        • 单个 url,proxy 代理
        • 多个 url,proxy 代理
    • React - 路由
    • React - Redux
    • React - 函数类型
    • React - 进阶知识
    • React - 父子传值与循环key
  • 渐进式框架 - Vue2

  • 渐进式框架 - Vue3

  • 前端
  • 界面构建框架 - React
Young Kbt
2022-02-21
1k
4m
37
目录
创建脚手架
todoList案例相关知识点
github搜索案例相关知识点
脚手架配置代理
单个 url,proxy 代理
多个 url,proxy 代理

React - 脚手架及使用

  • 创建脚手架
  • todoList案例相关知识点
  • github搜索案例相关知识点
  • 脚手架配置代理
    • 单个 url,proxy 代理
    • 多个 url,proxy 代理

# 创建脚手架

create-react-app 你的项目名称
1

# todoList案例相关知识点

  1. 拆分组件、实现静态组件,注意:className、style 的写法

  2. 动态初始化列表,如何确定将数据放在哪个组件的 state 中?

    • 某个组件使用:放在其自身的 state 中

    • 某些组件使用:放在他们共同的父组件 state 中(官方称此操作为:状态提升)

  3. 关于父子之间通信:

    • 【父组件】给【子组件】传递数据:通过 props 传递

    • 【子组件】给【父组件】传递数据:通过 props 传递,要求父提前给子传递一个函数

  4. 注意 defaultChecked 和 checked 的区别,类似的还有:defaultValue 和 value

    • defaultChecked:页面挂载只执行一次,后续改变后不会触发

    • checked:页面挂载时执行,并且页面更新时执行

  5. 状态在哪里,操作状态的方法就在哪里

# github搜索案例相关知识点

  1. 设计状态时要考虑全面,例如带有网络请求的组件,要考虑请求失败怎么办

  2. ES6 小知识点:解构赋值 + 重命名

    let obj = {a:{b:1}}
    const {a} = obj; // 传统解构赋值
    const {a:{b}} = obj; // 连续解构赋值
    const {a:{b:value}} = obj; // 连续解构赋值 + 重命名
    
    1
    2
    3
    4
  3. 消息订阅与发布机制

    1. 先订阅,再发布(理解:有一种隔空对话的感觉)

    2. 适用于任意组件间通信

    3. 要在组件的 componentWillUnmount 中取消订阅

      import PubSub from 'pubsub-js'
      
      // 订阅"报刊"组件
      ...
      this.token = PubSub.subscribe('kele',(publishName,stateObj)=>{ // 订阅 kele 的"报刊"
          this.setState(stateObj)
      })
      ...
      // 发布"报刊"组件
      ...
      PubSub.publish('kele',{isFirst:false,isLoading:true}) // 发布 kele 的"报刊"
      ...
      
      componentWillUnmount(){
          PubSub.unsubscribe(this.token)
      }
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
  4. fetch 发送请求(关注分离的设计思想)

    try {
        const response= await fetch(`/api1/search/users2?q=${keyWord}`)
        const data = await response.json()  // 才是需要的数据
        console.log(data);
        } catch (error) {
        	console.log('请求出错',error);
    }
    
    1
    2
    3
    4
    5
    6
    7

# 脚手架配置代理

# 单个 url,proxy 代理

在 package.json 里配置代理对象

"proxy":"http://域名:端口号"
1

当请求你的端口时候,如果本地端口没有内容,则由代理对象去配置端口号请求内容。

前提:请求的端口和域名必须是自己的,因为代理对象就是自己的端口和域名,只不过代理对象可以跨域,但是你不能请求跨域的域名和端口,并且请求内容 本地不存在,因为默认先去本地看,没有再通过代理对象进行跨域。

举例

在 package.json 中追加如下配置

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

说明:

  1. 优点:配置简单,前端请求资源时可以不加任何前缀

  2. 缺点:不能配置多个代理

  3. 工作方式:上述方式配置代理,当请求了 3000 不存在的资源时,那么该请求会转发给 5000(优先匹配前端资源)

# 多个 url,proxy 代理

  1. 第一步:创建代理配置文件

    在 src 下创建配置文件:src/setupProxy.js,固定位置

  2. 编写 setupProxy.js 配置具体代理规则:

const proxy = require('http-proxy-middleware')

module.exports = function(app) {
    app.use(
        proxy('/api1', {  //api1是需要转发的请求(所有带有/api1前缀的请求都会转发给5000)
            target: 'http://localhost:5000', //配置转发目标地址(能返回数据的服务器地址)
            changeOrigin: true, //控制服务器接收到的请求头中host字段的值
            /*
          changeOrigin设置为true时,服务器收到的请求头中的host为:localhost:5000
          changeOrigin设置为false时,服务器收到的请求头中的host为:localhost:3000
          changeOrigin默认值为false,但我们一般将changeOrigin值设为true
         */
            pathRewrite: {'^/api1': ''} //去除请求前缀,保证交给后台服务器的是正常请求地址(必须配置)
        }),
        proxy('/api2', { 
            target: 'http://localhost:5001',
            changeOrigin: true,
            pathRewrite: {'^/api2': ''}
        })
    )
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

​

说明:

  1. 优点:可以配置多个代理,可以灵活的控制请求是否走代理

  2. 缺点:配置繁琐,前端请求资源时必须加前缀

image-20220226174832719

编辑此页 (opens new window)
#React
更新时间: 2023/10/23, 10:58:52
React - 基础与核心
React - 路由

← React - 基础与核心 React - 路由→

最近更新
01
技术随笔 - Element Plus 修改包名 原创
11-02
02
Reactor - 扩展性
11-02
03
Reactor - 最佳实践
11-02
更多文章>
Theme by Vdoing | Copyright © 2021-2025 Young Kbt | blog
桂ICP备2021009994号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式