react基础详细介绍(消息订阅-发布机制、ajax请求、路由基础知识)

2023-11-02

一、消息订阅-发布机制

1、工具库:PubSubJS

2、下载:npm i pubsub-js --save

3、使用:

import PubSub from ‘pubsub-js’;//引入

PubSub.subscribe(‘delete’,function(data){});//订阅

PubSub.publish(‘delete’,data);//发布消息

二、连续解构赋值

let obj = {a:{b:{c:1}}};
let obj2= {a:{b:1}};
console.log(obj.a.b.c);
const {a:{b:{c}}} = obj;
//连续解构赋值
console.log(c);
//连续解构赋值加上重命名
const {a:{b:data}} = obj2;
console.log(data)

三、基于react搜索小案例

发布—订阅:

(1)List什么时候订阅消息合适?

在页面渲染完成时进行订阅

import PubSub from 'pubsub-js';
componentDidMount(){
//第一个参数订阅的名称,第二个参数回调函数
this.token = PhbSub.subscribe('atguigu',(_,stateObj)=>{
this.setState(stateObj)
})}
//组件卸载的时候,将订阅消息取消掉
componentWillUnmount(){
    PubSub.unsubscribe(this.token)
}

(2)Header代码

import PubSub from 'pubsub-js';
search = ()=>{
//第一个参数发布的名称,第二个参数为:所要传递的数据
PubSub.publish('atguigu',{isFirst:false})
}

四、ajax请求方式?

1、xhr最原始的方式

2、jQuery是对xhr的封装

3、axios是对xhr的封装

4、fetch是window内置

五、fetch

1、特点:

原生函数,不在使用XmlHttpRequest对象提交ajax请求

老版本浏览器可能不支持

2、代码片段:

(1)为优化版本:

//发送网络请求,使用fetch方法
fetch('发送的地址').then(res=>{
//res.json()返回的是Promise实例对象
console.log('联系服务器成功了',res.json())return res.json()
},err=>{
 console.log('联系服务器失败了');
 return new Promise(()=>{})
}).then(res=>{
    console.log('获取数据成功了',res)
},err=>{
    console.log('获取数据失败了',err)
})

(2)优化版本:

//发送网络请求,使用fetch方法
fetch('发送的地址').then(res=>{
console.log('联系服务器成功了',res.json())return res.json()
}).then(res=>{
    console.log('获取数据成功了',res)
}).catch(
(err) =>{
console.log(err)
   }
)

(3)优化版本:

//发送网络请求,使用fetch方法
try{
const response = await fetch('发送的地址');
const data = await response.json();
console.log(data);
}catch(error){
console.log('请求出错',error)
}

六、基于react搜索小案例相关知识点

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

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

3、消息订阅与发布:

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

(2)适用于任意组件间通信

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

4、fetch发送请求(关注分离的设计思想)
try{
const response = await fetch(‘发送的地址’);
const data = await response.json();
console.log(data);
}catch(error){
console.log(‘请求出错’,error)
}

七、路由的基本使用

1、明确好界面中的导航区域、展示区

2、导航区的a标签进行路径的切换

Demo

3、展示区写Route标签进行路径的匹配

4、的最外侧包裹了一个或

八、路由组件与一般组件

1、路由注册

<Route path='/about' component={About}></Route>
<Route path='/home' component={Home}></Route>

2、在React中靠路由链接实现切换组件–编写路由链接

3、路由组件和一般组件最大的区别是:可以收到传递过来的props,这里面需要关注的有:history/location/match

4、写法不同:

一般组件:

路由组件:

5、存放位置不同:

一般组件:components

路由组件:pages

6、接收到的props不同:

一般组件:写组件标签时传递了什么,就能收到什么

路由组件:接收到三个固定的属性history/location/match

history:
       go();
       gouBack();
       goForward();
       push();
       repalce();
location:
       pathname:'/about'
       search:''
       state:undefined
match:
      params:{};
      path:'/about';
      url:'/about'

7、想要高亮的效果,则需要将Link修改为NavLink:

About

Home

九、NavLink与封装NavLink

1、NavLink可以实现路由链家的高亮,通过activeClassName指定样式名

2、标签体内容是一个特殊的标签属性

3、通过this.props.children可以获取标签体内容

十、Switch组件

1、在注册多个路由的时候,使用Switch组件进行包裹,,可以达到只要匹配到组件,即停止;

2、通常情况下,path和component是一对一的关系

3、Switch可以提高路由匹配效率(单一匹配)

十一、解决多级路径页面样式丢失的问题

1、将引入样式中的点去掉即可publilc/index.html

2、publilc/index.htm

书写的是绝对路径,由于是绝对类路径,所以一定不会出现问题;

3、在不改变点的情况下

将改为

十二、路由的严格匹配和模糊匹配

1、

以上是模糊匹配;

默认使用的是模糊匹配(简单记:【输入的路径】需要包含要【匹配的路径】,且顺序要一致);

2、、

严格匹配;

3、严格匹配不要随便开启,需要在开,有些时候开启会导致无法继续匹配二级路由

十三、Redirect的使用

一般写正在所有路由注册的最下方,当所有的路由都无法匹配的时候,跳转到Redirect指定的路由

<Switch>
  <Route path='/about' component={About}></Route>
  <Route path='/home' component={Home}></Route>
  <Redirect to='/home'/>
</Switch>

十四、嵌套路由

注册子路由时写上父路由的path值
路由的匹配是按照注册路由的顺序进行的

十五、向路由组件传递params数据

ajax:query/params/body

body:urlencode/json

//携带params参数

{item.title}

//声明接收params参数

在子组件利用:this.props.match.params可以拿到具体值

路由链接(携带参数):<Link to={"/demo/test/tom/18"}>详情</Link>
注册路由(声明接收):<Route path='/demo/test//:name/:age' component={Test} />
接收参数:const {id,title} = this.props.match.params;

十六、search参数

{item.title}

//search参数无需声明接收,正常注册路由即可

//接收search参数

import qs from ’querystring’

let obj = {name:'tom',age:18} // name=tom&age = 18;urlencode编码形式
console.log(qs.stringfy(obj));
let str = 'carName = 奔驰&price = 199';
console.log(qs.parse(str))

const {search} = this.props.location

const result = qs.parse(search.slice(1))//将前面的问号截取掉

备注:获取到的search是urlencode编码字符串,需要借助querystring解析

十七、state参数

//向路由组件传递state参数
<Link to={{pathname:'/home/message/detail',state:{id:item.id,title:item.title}}}>{item.title}</Link>

//state参数无需声明接收,正常注册路由即可
<Route path='/home/message/detail' component={Deatil}></Route>

//接收state参数
const {id,title} = this.props.location.state
备注:刷新也可以保留住参数

十八、push和repalce模式

十九、编程式路由导航

借助this.props.history对象上的API对操作路由跳转、前进、后退

this.props.history.push();

this.props.history.replace();

this.props.history.goBack();

this.props.history.goForward();

this.props.history.go();

replaceShow = (id,title) =>{
//replace跳转+携带params参数
this.props.history.replace('/home/message/detail/${id}/${title}')
 
//replace跳转+携带search参数
   this.props.history.replace('/home/message/detail?id=${id}$title = ${title}')
 
//replace跳转+携带state参数
this.props.history.replace(`/home/message/detail`,{id,title})   
}
<Button onClick={()=>{this.replaceShow(id,title)}}></Button>
pushShow = (id,title) =>{
//push跳转+携带params参数
this.props.history.push('/home/message/detail/${id}/${title}')
}
<Button onClick={()=>{this.pushShow(id,title)}}></Button>

二十、withRouter的使用

可以加工一般组件,让一般组件具备路由组件所特有的API,返回值是一个新组件

import {withRouter} from ‘react-router-dom’

export default withRouter(Header)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

react基础详细介绍(消息订阅-发布机制、ajax请求、路由基础知识) 的相关文章

  • Antd DatePicker 设置默认值报clone.weekday is not a function

    代码 dayjs版本1 11 7 页面 当点击页面日期框会报clone weekday is not a function 解决方法 在jsx文件中添加如下js import dayjs from dayjs import advanced
  • react项目中使用react-dnd实现列表的拖拽排序

    现在有一个新需求就是需要对一个列表 实现拖拽排序的功能 要实现的效果如下图 可以通过 react dnd 或者 react beautiful dnd 两种方式实现 今天先讲下使用react dnd是如何实现的 github地址 https
  • React重新渲染的触发机制及其优化策略

    React是一个用于构建用户界面的JavaScript库 它的核心特点之一是使用虚拟DOM Virtual DOM 来实现高效的组件渲染 那组件重新渲染的机制是如何呢 基于这些机制 如果进行优化呢 虚拟DOM是一个用JavaScript对象
  • React 组件通讯

    目录 1 组件通讯 概念 1 组件的特点 2 知道组件通讯意义 总结 2 组件通讯 props 基本使用 1 传递数据和接收数据的过程 2 函数组件使用 props 3 类组件使用 props 总结 3 组件通讯 props 注意事项 1
  • styled-components 的用法

    用于给标签或组件添加样式 给标签或组件添加样式 import styled from styled components styled button 给button标签添加样式 const Button styled button back
  • react基础--组件通讯:props基础、子传父、父传子、兄弟组件通讯、context跨级组件、props进阶

    目录 一 props基础 1 1 概述 1 2 函数组件通讯 1 2 1 基本用法 1 2 1 对象数据传递 1 3 类组件通讯 1 4 props的特点 二 组件通讯三种方式 2 1 父传子 2 2 子传父 2 3 兄弟组件通讯 三 co
  • Ionic3开发教程 - 开发(2)

    Ionic3开发系列教程Ionic3开发教程 环境准备 1 Ionic3开发教程 开发 2 Ionic3开发教程 发布Android版本 3 Ionic3开发教程 发布IOS版本 4 Ionic3开发教程 更新 5 本文中介绍的Ionic3
  • 组件间样式覆盖问题--CSS Modules

    1 组件间样式覆盖问题 问题 CityList 组件的样式 会影响 Map 组件的样式 原因 在配置路由时 CityList 和 Map 组件都被导入到项目中 那么组件的样式也就被导入到项目中了 如果组件之间样式名称相同 那么一个组件中的样
  • 三、react中类组件和函数组件

    简介 本篇我们只要介绍react中类组件与函数组件两种组件的写法 两者的优缺点 同时对在我们的项目开发中该使用类组件还是函数组件进行思考分析 废话不多说进入正题 类组件 设计思路 类组件时面向对象编程的思想 在其中我们去设计类组件时使用st
  • 关于Vue.js和React.js,听听国外的开发者怎么说?

    VueJS 与 ReactJS 到底怎么样如何 听听别人怎么说 使用所有新的库和框架 很难跟上所有这些库和框架 也就是说 这就需要您决定哪些是值得花时间的 让我们看看人们说什么 和Vue JS一起工作是很愉快的 我发现学习曲线很浅 然而 这
  • React中使用if else 条件判断

    在react中用jsx渲染dom的时候经常会遇到if条件判断 然而在jsx中竟是不允许if条件判断的 以下有几种判断方式 可以根据自己的应用场景 挑选适合的 方案一 class HelloMessage extends React Comp
  • React之state、hooks性能分析

    目录 一 state 1 为什么使用setState 2 setState异步更新 3 如何获取异步的结果 4 setState一定是异步吗 5 源码分析 6 数据的合并 7 多个state的合并 二 为什么需要Hook 三 Class组件
  • 前端学科面试题大全

    作用域和值类型引用类型的传递 变量作用域 作用域变量访问区域 变量值存在栈中 变量赋值相当于值赋值 值传递与引用传递有哪些区别 函数内部 变量会先声明 形式参数变量声明提升 整个函数体有var声明的变量 如果没有访问全局定义的num2 函数
  • 【react】回调函数形式的ref

    回调函数有3个特点 是我定义的函数 我没有调用这个函数 在我没有调用的情况下这个函数自己执行了 ref绑定一个箭头函数作为回调函数 可以输出以下这段看下 ref绑定的箭头函数是会自己执行的 class Demo extends React
  • umi 后台管理demo

    umi 后台管理demo umi react ts dva antd egg 有待优化 简单的前后端管理demo 接口提供增删查改 前端也有相应功能 github代码 https github com huiBuiling ql admin
  • 【React】 4课 react初识组件

    首先我们如1课创建一个文件夹在文件夹中安装react环境需要的配置文件 npm init y npm i babel standalone D npm i react react dom D 安装配置文件教程链接 https blog cs
  • 值得收藏的UmiJS 教程

    点击上方关注 前端技术江湖 一起学习 天天进步 前言 网上的umi教程是真的少 很多人都只写了一点点 很多水文 所以打算自己写一篇 自己搭建umi 并封装了一下常用的功能 并用到公司实际项目中 umi介绍 Umi 是什么 Umi 中文可发音
  • vue发展历史简介

    基本介绍 Vue 是一套用于构建用户界面的 渐进式框架 与其它大型框架不同的是 Vue 被设计为可以自底向上逐层应用 最初它不过是个人项目 时至今日 已成为全世界三大前端框架之一 github 上拥有 17 8万 Star 领先于 Reac
  • reactJS 干货(reactjs 史上最详细的解析干货)

    一 State和 Props state是状态机 应该包括 那些可能被组件的事件处理器改变并触发用户界面更新的数据 譬如需要对用户输入 服务器请求或者时间变化等作出响应 不应该包括 计算所得数据 React组件 在render 里使用pro
  • 黑马React:基础拓展

    黑马React D10 基础拓展 Date December 18 2023 useReducer 基础使用 作用 让 React 管理多个 相对关联 的状态数据 补充 和useState的作用类似 用来管理相对复杂的状态数据 特点 use

随机推荐

  • C++编程命名规范

    C 编程命名规范 PS 根据多年工作经验和其它命名规范整理而成 个人感觉比较规范的标准 现应用于我的开发团队 一 命名通用规则 文件名 函数名 变量名命名应具有描述性 不要过度的缩写 类型变量是名词 函数名是动词或动词 名词 函数名必须是指
  • 编译原理笔记

    目录 序章 编译原理 编译器 程序设计语言 第一章 概述 机器语言 第一代语言 特点 汇编语言 高级程序设计语言 鼻祖 时期 特点 翻译程序 汇编语言 解释语言 编译程序 编译过程 词法分析 语法分析 语义分析 中间代码生成 之前三步都是编
  • MongoDB数据库的基本操作

    一 使用async await对CRUD进行封装 1 定义dao层 数据库访问层 专门用于访问数据库 不和接口直接联系 2 定义service层 服务层 通过调用dao层的方法来获取数据 将结果通过res对象响应给客户端 3 路由接口 功能
  • odoo14本地开发部署

    odoo本地开发部署 1 使用git在本地安装odoo 1 1地址 https github com odoo odoo 1 2 复制https里面链接 git clone http github com odoo odoo git 1 2
  • maven打包,依赖也打进jar包

    一 如果没有依赖第三方包 可以用maven jar plugin插件 只是修改META INFO下的MANIFEST MF信息 指定运行jar包的main入口
  • [代码审计] fengcms1.32从详细漏洞分析到漏洞利用

    前言 这是我在此发表的第一篇代码审计的文章 仅供学习参考 首发于哈拉少安全小队微信公众号 一 Cms初识 FengCms 由地方网络工作室基于PHP MYSQL开发 是一款开源的网站内容管理系统 系统支持自由订制模型 你完全可以用FengC
  • 感知机算法(原始和对偶)——100%还原统计学习方法的python代码实现,每行都有注释,超清晰

    参考 统计学习方法 第二版 李航著 目录 一 感知机的定义 二 感知机模型 三 感知机学习策略 四 感知机学习算法 4 1感知机学习算法的原始形式 4 2 感知机学习算法的对偶形式 一 感知机的定义 假设输入空间 特征空间 是 输出空间是
  • [第五空间 2021]pklovecloud

  • VScode如何设置默认自动换行设置

    VScode安装完默认不能自动换行 文本超出显示时 需要拖动下面的滑块才能看到超出的部分 如图 看起来很不方便 自动换行 为了更方便看代码 我们可以设置自动换行显示 在菜单 查看 切换自动换行 选中 就可以自动换行了 或者直接按快捷键 AL
  • c++中的栈内存和堆内存的区别以及智能指针的使用

    栈内存和堆内存的区别 https www cnblogs com ChenZhongzhou p 5685537 html https blog csdn net qianyayun19921028 article details 8036
  • python如何实现前后端交互_笔记

    前端工程师的职责 1 UI重构 2 在正确的区域渲染出服务端的数据 毕竟 我们要构建一个大的web应用 必然不是普普通通的静态页面构成 下文将罗列前端工程师应该必备的同后端打交道的常用技能 1 服务端渲染 谈起服务端渲染 对于动态服务而言
  • 不均衡数据集采样2——BorderlineSMOTE算法(过采样)

    论文 Borderline SMOTE A New Over Sampling Method in Imbalanced Data Sets Learning https citeseerx ist psu edu viewdoc down
  • 高级JS(堆、栈、作用域、闭包、原型、this指向)

    一 变量的内存分配 基本数据类型 number string boolean undefined null symbol 引用数据类型 object array object function 基本数据类型 都是存放在栈内存中 栈内存空间大
  • 接口测试工具Postman(三)使用postman抓包捕获HTTP请求

    目录 一 捕获HTTP请求 二 代理 一 捕获HTTP请求 Postman提供了轻松查看和捕获应用程序中发送和接收的实际HTTP请求流量的工具 可以在Postman本机应用程序中使用内置代理进行抓包 1 postman内置代理 postma
  • python实现AI井字棋极大极小算法和Alpha-beta算法

    python实现AI井字棋极大极小算法和Alpha beta算法 程序设计思路 主要步骤和代码 对于两个算法流程图 运行结果 程序设计思路 大致思路 井字棋最后的结果无非就是玩家赢 电脑赢和平局三种结果 而最后的结果正对应这整棵棋盘生成树的
  • 辞职后的一些感想

    辞职了 不急着找工作 一直独立开发app 整天码UI取数据填数据 知识得不到沉淀 以前的blog都删了没什么意思 重新开始做个总结 也算个新启程吧
  • 87.el-table翻页后保存前一页所选并再次返回前一页时把数据勾选上

    1 首先给
  • 汇编基础知识

    一 汇编语法 1 GNU 汇编语法适用于所有的架构 并不是 ARM 独享的 GNU 汇编由一系列的语句组成 每行一条语句 每条语句有三个可选部分 如下 label instruction comment label 即标号 表示地址位置 有
  • Python面试数据库

    1 举常见的关系型数据库和非关系型都有那些 关系型 MySQL SQL Server Oracle Sybase DB2 非关系型 Redis MongodDB 2 MySQL常见数据库引擎及比较 InnoDB MyISAM NDB Mem
  • react基础详细介绍(消息订阅-发布机制、ajax请求、路由基础知识)

    一 消息订阅 发布机制 1 工具库 PubSubJS 2 下载 npm i pubsub js save 3 使用 import PubSub from pubsub js 引入 PubSub subscribe delete functi