React 学习小结(三)

React--》超详细教程——React脚手架的搭建与使用 React脚手架是开发现代Web应用的必备,其充分利用Webpack、Babel、ESlint等工具辅助项目的开发,当然这些工具也无需手动配置即可使用,脚手架的意义更多的是关注的是业务而不是工具的配置;项目的整体技术架构为:react + webpack + es6 + eslint。使用脚手架开发项目的特点:模块化、组件化、工程化。 阅读详情

所有的 Tips 均为本人 OneNote 中的笔记,复制过来就是图片,懒得转文本了

第三章:React 应用(基于React脚手架)

一、使用 create-react-app 创建 react 应用

1.1 react 脚手架

  1. xxx脚手架: 用来帮助程序员快速创建一个基于xxx库的模板项目
    1.包含了所有需要的配置(语法检查、jsx编译、devServer…)
    2.下载好了所有相关的依赖
    3.可以直接运行一个简单效果
  2. react提供了一个用于创建react项目的脚手架库: create-react-app
  3. 项目的整体技术架构为: react + webpack + es6 + eslint
  4. 使用脚手架开发的项目的特点: 模块化, 组件化, 工程化

1.2 创建项目并启动

  1. 第一步,全局安装:npm i -g create-react-app
  2. 第二步,切换到想创项目的目录,使用命令:create-react-app hello-react (hello-react 为项目名)
  3. 第三步,进入项目文件夹:cd hello-react
  4. 第四步,启动项目:npm start

1.3 react 脚手架项目结构

在这里插入图片描述

public ---- 静态资源文件夹
		favicon.icon ------ 网站页签图标
		index.html -------- 主页面
		logo192.png ------- logo图
		logo512.png ------- logo图
		manifest.json ----- 应用加壳的配置文件
		robots.txt -------- 爬虫协议文件
src ---- 源码文件夹
		App.css -------- App组件的样式
		App.js --------- App组件
		App.test.js ---- 用于给App做测试
		index.css ------ 样式
		index.js ------- 入口文件
		logo.svg ------- logo图
		reportWebVitals.js
			--- 页面性能分析文件(需要web-vitals库的支持)
		setupTests.js
			---- 组件单元测试的文件(需要jest-dom库的支持)

1.4 功能界面的组件化编码流程

  1. 拆分组件: 拆分界面,抽取组件
  2. 实现静态组件: 使用组件实现静态页面效果
  3. 实现动态组件
    1.动态显示初始化数据
    ——数据类型
    ——数据名称
    ——保存在哪个组件
    2.交互(从绑定事件监听开始)

Tips:样式的模块化

  1. 将 index.css 文件重命名为 index.module.css ,并在引用时用以下形式引入:
    <h2 className={hello.title}>Hello,React!</h2>
  2. 用 less 写可以不做样式模块化

Tips:标识组件的方法

  1. 首字母大写
  2. 后缀改为 .jsx
  3. 若组件内的 .jsx 为 index.jsx,则 import 导入时可以只写到文件夹

二、实战案例

2.1 ToDoList案例

TodoList案例

2.2 全选反选案例

全选反选框

第四章、React ajax

一、理解 React ajax

1.1 前置说明

  1. React 本身只关注于界面, 并不包含发送 ajax 请求的代码
  2. 前端应用需要通过 ajax 请求与后台进行交互 (json数据)
  3. React 应用中需要集成第三方 ajax 库(或自己封装)

1.2 常用的 ajax 请求库

  1. jQuery: 比较重, 如果需要另外引入不建议使用
  2. axios: 轻量级, 建议使用
    (1)封装XmlHttpRequest对象的ajax
    (2)promise风格
    (3)可以用在浏览器端和node服务器端

二、axios

2.1 文档地址

axios

2.2 相关 API

  1. GET 请求
axios.get('/user?ID=12345')
  .then(function (response) {
    console.log(response.data);
  })
  .catch(function (error) {
    console.log(error);
  });

axios.get('/user', {
    params: {
      ID: 12345
    }
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

  1. POST 请求
axios.post('/user', {
  firstName: 'Fred',
  lastName: 'Flintstone'
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});

Tips:网络请求三要素

  1. url —— 路径
  2. method —— 方式
  3. params —— 参数

三、react脚手架配置代理总结

3.1 方法一

在package.json中追加如下配置

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

说明:

  1. 优点:配置简单,前端请求资源时可以不加任何前缀。
  2. 缺点:不能配置多个代理。
  3. 工作方式:上述方式配置代理,当请求了3000不存在的资源时,那么该请求会转发给5000 (优先匹配前端资源)

3.2 方法二

  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. 缺点:配置繁琐,前端请求资源时必须加前缀。

四、消息订阅-发布机制

  1. 工具库: PubSubJS
  2. 下载: npm install pubsub-js --save
  3. 使用:
    (1)import PubSub from ‘pubsub-js’ //引入
    (2)PubSub.subscribe(‘delete’, function(data){ }); //订阅
    (3)PubSub.publish(‘delete’, data) //发布消息
// 发送消息:PubSub.publish(名称,参数)
PubSub.publish('atguigu',{isFirst:false,isLoading:true})

// 订阅消息:var token=PubSub.subscribe(名称,函数)
componentDidMount(){
    this.token = PubSub.subscribe('atguigu',(_,stateObj)=>{ //_下划线占位
    this.setState(stateObj)
  })
}
// 取消订阅:PubSub.unsubscribe(token)
componentWillUnmount(){
    PubSub.unsubscribe(this.token)
}
  1. 功能:可以实现子组件间的通信,而不用通过父组件传递参数
  2. 优点
    (1)低耦合
    publisher和subscriber时低耦合的,他们可以继续运行而不用管对方的状态。在传统的客服端-服务器范例中,服务器不运行,客户端就不能发送消息到服务器。客户端不运行,服务器就接收不到消息。
    (2)可扩展型
    通过平行的运行机制,消息缓存机制,基于一定规则的消息发送机,相比通常的客户端-服务端模式,订阅发布模式有更好的扩展性。但是在高耦合大容量的企业级环境中,不适合订阅发布机制。
  3. 缺点
    低耦合
    为什么这么说呢?publisher的消息数据结构必须定义的很合理,有相当的伸缩性。为了更改要发布的消息数据结构,publisher可能要知道所有的subscriber,同时也要修改他们或者与旧版本保持兼容。这使得重构publisher变的很困难。因为随着时间推移可能会更改需求,publisher数据结构的不变性会成为负担

五、Fetch

5.1 文档

  1. github
  2. segmentfault

5.2 特点

  1. fetch: 原生函数,不再使用XmlHttpRequest对象提交ajax请求
  2. 兼容性存在问题,老版本浏览器可能不支持
  3. 遵循关注分离原则,比如下楼买东西,拆解成下楼 + 买东西

5.3 相关 API

  1. GET 请求
fetch(url).then(function(response) {
    return response.json()
  }).then(function(data) {
    console.log(data)
  }).catch(function(e) {
    console.log(e)
  });
  1. POST 请求
fetch(url, {
    method: "POST",
    body: JSON.stringify(data),
  }).then(function(data) {
    console.log(data)
  }).catch(function(e) {
    console.log(e)
  })

Tips:与 xhr 的区别
在这里插入图片描述

六、github 搜索案例要点

  1. 设计状态时要考虑全面,例如带有网络请求的组件,要考虑请求失败怎么办。
  2. ES6小知识点:解构赋值+重命名
let obj = {a:{b:1}}
const {a} = obj; //传统解构赋值
const {a:{b}} = obj; //连续解构赋值
const {a:{b:value}} = obj; //连续解构赋值+重命名
  1. 消息订阅与发布机制
    (1)先订阅,再发布(理解:有一种隔空对话的感觉)
    (2)适用于任意组件间通信
    (3)要在组件的componentWillUnmount中取消订阅
  2. fetch发送请求(关注分离的设计思想)
try {
	const response= await fetch(`/api1/search/users2?q=${keyWord}`)
	const data = await response.json()
	console.log(data);
} catch (error) {
	console.log('请求出错',error);
}

React 系列小结:

React 学习小结(一)
React 学习小结(二)
React 学习小结(三)
React 学习小结(四)
React 系列小结(五)
React 系列小结(六)

React实战-如何在ReactJs中调用Google、Baidu地图 React实战-如何在ReactJs中调用Google、Baidu地图 在这个互联网时代,对地图的运用已经成为Web、移动各类应用的必选项。国内外各大地图应用提供商均有开放的Api供大家使用,当然更具使用的功能会提供付费版和免费版,如果仅仅只是小的应用或者练手,完全可以调用其免费版。调用的方式也很简单,跟你调用其他的第三方库类似。但是由于ReactJs的实现方式存在一些特殊性,其调用Google 阅读详情

相关推荐

<前端人自己的跨域>React-ajax以及setupProxy配置代理

安装axios输入命令后,可以在文件中查看是否安装完成如图出现axios:版本号,代表安装完成,可以使用~例如,我们需要点击按钮向服务器发送请求:首先我们需要使用 搭建一个服务器 就像这样,服务器搭建好了,并且服务一旦开启就会被use中间件监听到,打印出“有人请求服务器1了”;开启服务:(或者)服务器开启在5000端口…由于浏览器地址栏默认发送的就是get请求,我们可以在地址栏输入:按下回车键,查看服务是否可以成功返回数据:可以看出,服务器可以正常返回数据。那么现在就是发送服务获取学生数据了:在中: 尝试点

Coding and studying 3069

react脚手架配置代理总结

方法一 在package.json中追加如下配置 "proxy":"http://localhost:5000" 说明: 优点:配置简单,前端请求资源时可以不加任何前缀。 缺点:不能配置多个代理。 工作方式:上述方式配置代理,当请求了3000不存在的资源时,那么该请求会转发给5000 (优先匹配前端资源) 方法二 第一步:创建代理配置文件 在src下创建配置文件:src/setupProxy.js 编写setupProxy.js配置具体代理规则: const proxy = requir

959 385

ReactJS_1:从基础到进阶的全面学习

本文还有配套的精品资源,点击获取 简介:ReactJS是由Facebook开发的开源JavaScript库,以其组件化开发和虚拟DOM特性为核心,用于构建高效的用户界面。本资料包提供了从基础知识到高级应用的完整学习路径,包括但不限于组件的props和state管理、React Router路由配置、React Hooks的使用、环境配置、测试工具应用、性能优化技巧,以及与其...

weixin_35935514的博客 1512

React 脚手架

React 脚手架

weixin_74535649 6580

redux-subscriber:订阅redux状态中任何部分的更改

Redux用户 该软件包允许您订阅状态中任何部分的更改。 安装 npm install redux-subscriber --save 用法 store.js import { createStore } from 'redux' ; import initSubscriber from 'redux-subscriber' ; const store = createStore ( ... ) ; // "initSubscriber" returns "subscribe" function, so you can use it const subscribe = initSubsc

SAP ABAP开发避坑:BAPI_MATVAL_PRICE_CHANGE调用报‘估价未维护’的完整解决流程

本文深入解析SAP ABAP开发中调用BAPI_MATVAL_PRICE_CHANGE函数时遇到的'估价未维护'错误,提供从基础配置检查到CKML_PRICE_SEND表维护的完整解决方案。通过实战案例和代码示例,帮助开发者快速定位问题并实现批量价格更新的自动化处理,提升开发效率。

weixin_28705087的博客 428

React脚手架

项目的整体技术架构为: react + webpack + es6 + eslint,使用脚手架开发的项目的特点: 模块化, 组件化, 工程化。第二步,切换到想创项目的目录,使用命令:create-react-app project_name。(2)【子组件】给【父组件】传递数据:通过props传递,要求父提前给子传递一个函数。——某个组件使用:放在其自身的state中。

zag666的博客 2530

RT-Thread学习笔记(5):SPI驱动框架分析

1、两个设备模型 在spi驱框架中,一般会自己初始化一个总线设备(rt_spi_bus),当我们通过挂载后,会相应注册一个从设备(rt_spi_device)。 1、总线设备模型 struct rt_spi_bus { struct rt_device parent; rt_uint8_t mode; const struct rt_spi_ops *ops; struct rt_mutex lock; struct rt_spi_device *owner; };

BLBQ962464的博客 1万+

React学习小结(三)

一、React数据的传输 1、属性和状态是react中数据传递的载体 2、属性是声明以后不允许被修改的东西 3、属性只能在组件初始化的时候声明并传入组件内部,并且在组件内部通过this.props获取 4、组件内部可以通过getDefaultProps声明默认属性 下面来说一下属性传值的两种方式:1.key-value形式 2.展开式 首先来看一下第一种传值方式: var...

weixin_30794491的博客 88

电池管理系统(BMS)系列(四)—数据采集之温度

属于BMS系列文章,介绍了电池包温度采集相关方式

zxx52113140的博客 5461

C#开发者必备:VSPD虚拟串口快速配置指南(附汉化教程)

本文为C#开发者提供了VSPD虚拟串口的快速配置与汉化教程。详细介绍了如何安装、汉化VSPD,并创建稳定的虚拟串口对,重点讲解了如何将其集成到C#开发工作流中,使用SerialPort类进行数据通信测试、协议模拟及故障排查,有效提升硬件通信开发的效率。

weixin_29224529的博客 258

react学习小结:state,props,refs三大核心属性

state: 要使用class中的构造函数:constructor //构造器调用几次? ———— 1次 constructor(props){ super(props) } 事件处理使用changeWeather,改变数据需要用this.setState() //changeWeather调用几次? ———— 点几次调几次 changeWeather(){ //changeWeather放在哪里? ———— Weather的原型对象上,供实例使用

weixin_52005030的博客 127

传感器融合的智能演进:ST-MC-Workbench中霍尔与编码器的协同控制策略

本文探讨了ST-MC-Workbench中霍尔传感器与编码器的协同控制策略,通过传感器融合技术提升电机控制精度。文章详细介绍了分层处理架构、霍尔安装角度优化及编码器Z脉冲容错机制,展示了在新能源汽车和工业应用中的实际效果,为高精度位置检测提供了解决方案。

weixin_29159441的博客 486

入门指南:从零开始学习ReactJS

ReactJS是一个强大的JavaScript库,用于构建用户界面。它由Facebook开发,并于2013年首次发布。自那时以来,React已成为前端开发中最受欢迎的库之一,许多公司和开发者都在使用它来构建高性能、交互式的Web应用程序。本文将向您介绍ReactJS的基础知识,并通过实践示例来帮助您入门。我们将从React的核心概念开始,逐步深入,直到您能够构建简单的React应用为止。

努力是为了站在万人之中,成为别人的光 2万+

别再为跨页读写发愁了!STM32F407模拟I2C驱动24C256/512的避坑指南

本文详细解析了STM32F407模拟I2C驱动24C256/512的跨页写入问题,揭示了24C系列存储器'写满一页不会自动翻页'的关键机制,并提供了经过验证的分页写入算法和优化方案。通过GPIO时序优化、地址计算和错误处理等技巧,帮助开发者解决数据错乱、覆盖等常见问题,实现稳定可靠的EEPROM读写操作。

weixin_42631411的博客 377

SpringBoot一次请求中缓存数据,请求结束就清除的4种方法,你会几种?

通过以上四种方法,你可以在 SpringBoot 的一次请求中缓存数据,并在请求结束后自动清除这些缓存数据。使用 ThreadLocal:适用于需要跨多个方法调用的缓存数据,灵活性高,但需要注意内存泄漏问题。使用 AOP:适用于全局性的缓存管理,代码更加优雅,但需要对 AOP 有一定的了解。使用 ServletRequestListener:适用于简单的请求生命周期管理,配置简单,但功能相对有限。使用 HttpServletRequest 的 setAttribute 和 getAttribute。

java专栏 1295

React学习教程,从入门到精通, ReactJS - 安装:初学者指南(3)

在我们开始安装之前,让我们快速了解一下ReactJS是什么。React是一个流行的JavaScript库,用于构建用户界面,尤其是单页应用程序。它主要是关于创建可重用的UI组件,这些组件管理自己的状态,使得构建复杂的界面变得更加容易。

qq_45746668的博客 2531

【学习系列】SAP RAP 4:通过注解来完成一些常规需求

本文介绍了RAP应用中常用注解的实现方式,包括搜索帮助、文本描述绑定、联动搜索、字段控制等功能。通过@Consumption、@UI等注解可以实现搜索帮助定义、多字段联动、必输校验、默认排序和默认值设置。管理字段可通过@Semantics注解自动记录创建/修改信息,长文本使用@UI.multiLineText实现多行显示。这些注解可优化界面交互和数据管理,为后续行为定义功能开发奠定基础。文章结构清晰,针对不同需求提供了具体的实现方案和代码示例。

DeveloperMrMeng的博客 700

使用reactjs-popup创建React模态框(Modal)的完整指南

在现代Web开发中,模态框(Modal)是一种常见的UI组件,用于显示重要信息、收集用户输入或确认操作。reactjs-popup库提供了一种简单而强大的方式来创建React模态框,无需复杂的配置即可实现专业级的弹窗效果。 ## 基础模态框实现 使用reactjs-popup创建基础模态框非常简单,只需在Popup组件上添加`modal`属性即可: ```jsx import Popup f

gitblog_00215的博客 1329

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

react方面的pdf_ReactJS中文API.pdf

ReactJS中文API1.顶层API1.1ReactReact是 React 库的入口。如果使用的是预编译包 ,则 React是全局的 ;如果使用 CommonJS 模块系统,则可以用 require() 函数引入React。1.1.1React.createClassReactClasscreateClass(objectspecification)创建一个组件类 ,并作出定义。组件实现了 r...

weixin_39571087的博客 1384

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

使用reactjs-popup创建React Modal

如今,模态是React应用程序中最常用的组件之一,通过一种简单的方法来创建React Modals将帮助您在即将到来的React应用程序中快速了解与Modals相关的功能。 在本教程中,我们将仅使用22行代码构建一个简单的React Modal。 下面的gif可以帮助您了解我们正在尝试构建的内容 开始吧 创建React项目 首先,使用create-react-app CLI创建一个简单...

编程故事的地方 1936

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ReactJS学习小结

ReactJS小结 关于ReactJS主要有以下几点: 1、ReactJs是基于组件化的开发,所以最终你的页面应该是由若干个小组件组成的大组件。 2、可以通过属性,将值传递到组件内部,同理也可以通过属性将内部的结果传递到父级组件(留给大家研究);要对某些值的变化做DOM操作的,要把这些值放到state中。 3、为组件添加外部css样式时,类名应该写成className而不是class;添加内部...

炒饭的博客 297

ReactJS 101代码规范终极指南:Airbnb React/JSX风格指南的实际应用

ReactJS 101作为React开发者的入门指南,不仅教授React基础知识,还特别强调了代码规范的重要性。在React开发中,遵循统一的代码规范是提升团队协作效率和代码质量的关键。本文将深入探讨如何在ReactJS 101项目中实际应用Airbnb React/JSX风格指南,帮助开发者编写更专业、更易维护的React代码。 ## 📋 为什么需要React代码规范? 在团队协作开发中,

gitblog_00879的博客 1860

reactjs-vite-tailwindcss-boilerplate核心功能揭秘:为什么它是React项目的终极选择

reactjs-vite-tailwindcss-boilerplate是一个集成了Vite、React 18、TypeScript、Vitest、Testing Library、TailwindCSS 3、Eslint和Prettier的强大项目模板,为React开发者提供了一站式的开发解决方案,帮助快速构建现代化的Web应用。 ## 🌟 核心技术栈解析 ### Vite:极速构建体验 作

gitblog_00620的博客 2004

如何学习ReactJS:

文章目录1、基本条件2、HTML,CSS,JavaScript3、Javascript的ES6功能4、NodeJS基础和代码编辑器导入:一旦在项目中使用NPM安装了Node模块,就必须使用'import'关键字来使用该模块。导出:在创建模块/组件时使用此关键字,而您只需要返回一部分,而不必返回所有方法和变量。5、学习ReactJS 1、基本条件 HTML,CSS和JavaScript的基本知识。...

X W F 486

reactjs构建工具_10种ReactJS工具可提升您的Web开发技能

reactjs构建工具 您知道一眼提交的大多数求职简历都会被拒绝吗? 如果您尝试开始进行Web开发,那将是一个艰巨的事实,但是有很多方法可以改善您为潜在的雇主和客户提供的服务。 对于应用程序开发人员而言,现在是提高技能的好时机,开源是专业开发的最佳途径。 您无需上大学即可学习新的开源技能; 您需要的只是方向感和自律感。 ReactJS是您成为一名成功的Web开发人员时应明智学习的众多技能之一...

cumj63710的博客 2054
上一篇: React组件化开发实现TodoList待做列表
下一篇: React 学习小结(四)
APythonC
博客等级 码龄7年 23粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值