React【axios、全局处理、 antd UI库、更改主题、使用css module的情况下修改第三方库的样式、支持sass less】(十三)

news2024/11/28 14:36:57

文件目录

Proxying in Development

http-proxy-middleware

fetch_get

fetch 是否成功

axios

全局处理

 antd UI库

更改主题

使用css module的情况下修改第三方库的样式

支持sass & less


 

Proxying in Development

在开发模式下,如果客户端所在服务器跟后台服务器的地址或者端口不一致,则会出现跨域的问题。
服务器运行在3030端口:

//server/index.js
const express=require('express')
const app=express()
app.get('/api/*',(req,res)=>{
    res.send('来自服务端的响应信息!!')
})
app.listen(3030,()=>{
    console.log('服务器正在监听3030端口')
})

发送网络请求:
 

import logo from './logo.svg';
import './App.css';
import { Outlet } from 'react-router-dom';
function App() {
  const onFetch=()=>{
      //向服务器发送网络请求
    fetch('http://localhost:3030/api/user')
 }
  return (
    <div className="App">
      <button onClick={onFetch}>发送请求</button>
    </div>
 );
}
export default App;

 使用Proxy解决跨域
在package.json中设置Proxy属性:

"proxy":"http://localhost:3030"

设置代理后,则发送的api请求会被代理服务器转发到 localhost:3030

提示:
proxy代理仅在开发中有效。
在生产环境下,这个代理无效。

http-proxy-middleware
 

 为了更灵活的配置代理信息,我们可以使用http-proxy-middleware。

1、安装http-proxy-middleware
 

npm install http-proxy-middleware  
//或者 yarn add http-proxy-middleware

2、创建src/setupProxy.js文件

const { createProxyMiddleware } = require('http-proxy-middleware');
module.exports = function(app) {
//app为Express实例
    //使用app.use注册中间件
  app.use(
    '/api/*',
    createProxyMiddleware({
        //target:服务器地址
      target: 'http://localhost:3030',
      changeOrigin: true
   })
 );
};

提示:
该文件是只支持NodeJs语法,因为它运行在Node环境中。

fetch_get

 fetch是浏览器提供的API,用于发起获取资源的请求,它返回一个 promise。

fetch(input[, init])
      input:要获取资源的 URL
      init:(可选)配置对象
      返回Promise


get
 

fetch('/api/user').then(res=>{
      // res是响应对象
      //返回的body是字符串,所以使用text()读取
      return res.text()
   }).then(data=>{
      console.log(data)
   })

传递参数

//get请求传递参数
fetch('/api/user?name=baizhan').then(res=>{
      // res是响应对象
      //返回的body是json,所以使用json()读取
      return res.json()
   }).then(data=>{
      console.log(data)
   })

fetch 是否成功

 当遇到网络错误时, fetch() 返回的 promise 会被 reject。成功的 fetch() 检查不仅要包括 promise 被 resolve,还要判断下status,HTTP 500或者404 状态并不被认为是网络错误,依然会返回响应对象,只不过它的ok为false。
服务器的状态码返回500:

res.status(500).send('服务器发生错误')})
fetch('/api/user').then(res=>{
      // res是响应对象
      console.log(res)
        return res.text()
   }).then(data=>{
      console.log(data)
   }).catch(e=>{
      // catch捕获不到我们预期的错误
   })

应当判断响应信息的status或者ok是否为true,否则抛出错误
 

fetch('/api/user').then(res=>{
      // res是响应对象
      console.log(res)
      if(res.status==200){
        return res.text()
     }
      throw new Error('响应发生错误')
   }).then(data=>{
     // 抛出错误,则这个回调函数并不会被调用
      console.log(data)
   }).catch(e=>{
      // 抛出错误,catch捕获,可以编写处理错误的逻辑
   })

axios

 Axios 是一个基于 promise 网络请求库。

1、安装axios

npm instal axios
//或者yarn add axios

get

axios.get('/api/user',{params: {name:'xiaotong'}}).then(res=>{
      console.log(res.data)
   })

post

//传递json数据  
axios.post('/api/user', {name:'xiaotong'}).then(res=>{
      console.log(res.data)
   })
//传递表单数据  
axios.post('/api/user',{name:'xiaotong'},{
      headers:{"Content-Type":"application/x-www-form-urlencoded"}
   }).then(res=>{
      console.log(res.data)
   })

全局处理

1、指定默认配置
您可以指定默认配置,它将作用于每个请求。

axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

2、拦截器
在请求或响应被 then 或 catch 处理前拦截它们。
 

// 添加请求拦截器
axios.interceptors.request.use(function (config) {
      // 在发送请求之前做些什么
      config.headers['Authorization'] = 'xxxxxxx';
      config.headers['Content-Type'] = 'application/x-www-form-urlencoded';
      return config
   });
// 添加响应拦截器
  
axios.interceptors.response.use(function
(response) {
      // 2xx 范围内的状态码都会触发该函数。
      // 对响应数据做点什么
      console.log(response)
      return response
   }, function (error) {
      // 超出 2xx 范围的状态码都会触发该函数。
      // 对响应错误做点什么
      console.log(error)
      
   })

提示:
axios参考文档:https://www.axios-http.cn/docs/intro

 antd UI库

 antd 是基于 Ant Design 设计体系的 React UI 组件库,主要用于研
发企业级中后台产品。

官方文档:https://ant.design/index-cn

 1、安装antd

npm install antd
//或者yarn add antd

2、使用antd

//AntdTest.js
import React from 'react';
import { Button, DatePicker } from 'antd'
export default function index() {
    return (
        <div >
            <Button type='primary'>我是来自antd的按钮</Button>
            <DatePicker />
        </div>
   );
}


3、国际化
 

//index.js
import zhCN from 'antd/locale/zh_CN';
import {ConfigProvider} from 'antd'
<React.StrictMode>
    <ConfigProvider locale={zhCN}>
    <App/>
    </ConfigProvider>
  </React.StrictMode>

4、引入重置样式
 

//index.js
import 'antd/dist/reset.css';

更改主题

 更改主题
通过ConfigProvider设置主题
切换内置主题:默认有三个内置主题(defaultAlgorithm,darkAlgorithm, compactAlgorithm)

 

//通过修改 ConfigProvider 中 theme 属性的 algorithm 属性来切换
import {ConfigProvider,theme} from 'antd'
//index.js
<ConfigProvider locale={zhCN} theme={{
       algorithm: theme.darkAlgorithm,
   }}>
    <App/>
  
    </ConfigProvider>

配置主题(修改主题变量)
 

<ConfigProvider
    theme={{
      token: {
        colorPrimary: '#00b96b',
     },
   }}
  >
    <App />
  </ConfigProvider>

提示:
主题变量参考   https://ant.design/docs/react/customize-theme-cn

 使用Desing Token

import React from 'react';
import { Button, DatePicker ,theme} from 'antd'
export default function index() {
    //调用theme的useToken()获取当前主题下的Design Token
    const {token}=theme.useToken()
    return (
        <div >
            <Button type='primary'>我是来自antd的按钮</Button>
            <DatePicker />
           {/* 根据变量名来访问 */}
            <div style= {{color:token.colorPrimary}}>hello,xiaotong</div>
        </div>
   );
}

使用css module的情况下修改第三方库的样式

 

//AntdTest/index.module.css
.container :global(:where(.css-dev-only-donot-override-1ni1eeq).ant-btn-primary){
    background:red
}

:where 选择器降低 CSS Selector 优先级,以减少用户升级 v5 时额外调整自定义样式成本。
 比对:

.ant-btn-primary{
        background:red//它的优先级更高
}
:where(.css-dev-only-do-not-override-1ni1eeq).ant-btn-primary{
        background:blue
}

支持sass & less

 支持sass
       安装sass

npm install sass
或者yarn add sass

      更改文件的后缀为.scss
 

支持less
     导出配置文件。

npm run eject
或者yarn run eject

安装less和less-loader
 

npm install less less-loader -D
或者yarn add less less-loader -D

修改webpack.config.js

//定义正则,用来查找文件以.less结尾的文件
const lessRegex = /\.less$/;
const lessModuleRegex = /\.module\.less$/;
  {
              test: lessRegex,
              exclude: lessModuleRegex,
              use: getStyleLoaders(
               {
                  importLoaders: 3,
                  sourceMap: isEnvProduction
                    ? shouldUseSourceMap
                   : isEnvDevelopment,
                  modules: {
                    mode: 'icss',
                 },
               },
                'less-loader'
             ),
              // Don't consider CSS imports dead code even if the
              // containing package claims to have no side effects.
              // Remove this when ,webpack adds a warning or an error for this.
              // See https://github.com/webpack/webpack/issues/6571
              sideEffects: true,
           },
            // Adds support for CSS Modules, but using SASS
            // using the extension.module.scss or .module.sass
           {
              test: lessModuleRegex,
              use: getStyleLoaders(
               {
                  importLoaders: 3,
                  sourceMap: isEnvProduction
                    ? shouldUseSourceMap
                   : isEnvDevelopment,
                  modules: {
                    mode: 'local',
                    getLocalIdent: getCSSModuleLocalIdent,
                 },
               },
                'less-loader'
             ),
           },

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java poi给docx中的关键字标记颜色

Java poi给docx中的关键字标记颜色 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId>&l…

k8s 部署mqtt —— 筑梦之路

mqtt是干嘛的&#xff0c;网上有很多资料&#xff0c;这里就不再赘述。 --- apiVersion: apps/v1 kind: Deployment metadata:labels:app: mqttname: mqttnamespace: default spec:replicas: 1selector:matchLabels:app: mqttstrategy:rollingUpdate:maxSurge: 25%maxUnavaila…

鲁大师10月新机性能/流畅/久用榜:骁龙8 Gen3一鸣惊人,双十一“6系”处理器成井喷状态

刚刚过去的10月份手机圈可谓是热闹纷呈,要数量有数量,要新品有新品,要旗舰有旗舰,要走量也有走量。10月份的大部分光芒,毫无疑问都将被骁龙8 Gen3以及重夺骁龙旗舰首发的小米 14系列身上。 骁龙8 Gen3毫无疑问,代表着骁龙旗舰处理器的又一个巅峰,从目前鲁大师后台抓取到的数据…

计算机毕业设计:基于python机器学习的全国气象数据采集预测可视化系统 预测模型+爬虫(包含文档+源码+部署教程)

[毕业设计]2023-2024年最新最全计算机专业毕设选题推荐汇总 感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;希望帮助更多的人 。 1、摘 要 随着气候变化的不断加剧&#xff0c;气象数据的准确性…

starrocks 内部表 varchar(num) 和 String 怎么选

盲选string varchar可能会因为脏数据 长度过长出现报错

【FPGA】正确处理设计优先级--或许能帮你节省50%的资源

概述 假如现在有一种方法–可以在不怎么需要修改已有设计的情况下&#xff0c;就可以帮您节省50%的设计资源&#xff0c;那你会试试看吗&#xff1f; 当前市场环境下&#xff0c;更低廉的成本却可获得同等性能无疑是极具诱惑的。本文将介绍一种FPGA设计技术&#xff0c;该技术…

“云芯一体”赋能位置应用,真点高精度定位服务正式发布

11月9日&#xff0c;北斗星通旗下企业真点科技正式发布了云芯一体高精度定位服务——TruePoint.CM(厘米级定位服务)和TruePoint.DM&#xff08;分米级定位服务&#xff09;。 此次发布会在第一届测绘地理信息大会期间举办&#xff0c;中国测绘学会宋超智理事长、中国卫星导航定…

Vue.Draggable 踩坑:add 事件与 change 事件中 newIndex 字段不同之谜

背景 最近在弄自定义表单&#xff0c;需要拖动组件进行表单设计&#xff0c;所以用到了 Vue.Draggable(中文文档)。Vue.Draggable 是一款基于 Sortable.js 实现的 vue 拖拽插件&#xff0c;文档挺简单的&#xff0c;用起来也方便&#xff0c;但没想到接下来给我遇到了灵异事件……

Python数据容器(元组)

元组 1.定义元组 定义元组使用小括号&#xff0c;且使用逗号隔开各个数据&#xff0c;数据是不同的数据类型 # 定义元组字面量 (元素,元素,...,元素) # 定义元组变量 变量名称 (元素,元素,...,元素) # 定义空元组 变量名称 () 变量名称 tuple()2.元组的相关操作 编号方法…

JavaScript_Node节点属性_nodeName

nodeName属性&#xff1a;返回节点的名称 节点的类型有七种 Document&#xff1a;整个文档树的顶层节点 DocumentType&#xff1a;doctype标签 Element&#xff1a;网页的各种HTML标签 Attribute&#xff1a;网页元素的属性 Text&#xff1a;标签之间或标签包含的文本 C…

【kylin】使用nmtui软件配置网桥

文章目录 一、什么是网桥二、如何配置网桥域名解析失败 一、什么是网桥 网桥也叫桥接器&#xff0c;是连接两个局域网的一种存储/转发设备&#xff0c;它能将一个大的LAN分割为多个网段&#xff0c;或将两个以上的LAN互联为一个逻辑LAN&#xff0c;使LAN上的所有用户都可访问服…

go 引入包报错“构建约束排除‘D/...vendor/pkg包’”中所有的GO文件

解决方案&#xff1a; 方案一&#xff1a;没生效 go - 构建约束排除所有 Go 文件 - IT工具网 go modules - build constraints exclude all Go files in - Stack Overflow 方案二&#xff1a;生效&#xff0c;手动初始化创建一个目录 后续再研究原因&#xff0c;有明白的大…

第18章Swing程序设计

Swing程序设计 Swing用于开发桌面窗体程序用于JDK的第二代GUI框架&#xff0c;其功能比JDK第一代GUI框架AWT更为强大&#xff0c;性能更加优良。但因为Swing技术推出时间太早&#xff0c;七性能&#xff0c;开发效率等不及一些其他的留下技术&#xff0c;所以目前市场大多数桌面…

ISP算法——UVNR

ISP算法——UVNR 概念简介 UVNR也就是经过CSC只有在YUV域对UV两个色域进行降噪&#xff0c;在有些方案里也叫CNR&#xff08;chroma noise reduction&#xff09;。主要就是在YUV域针对彩燥进行特殊处理的一系列算法。 关于噪声产生的原因在前面关于降噪的文章和视频中已经做…

latex cite命令、款式

UTS SEDE 的 latex 模板 [1,2] 用 biblatex&#xff0c;默认用的引用格式是 ieee。然而 Research Foundation 的 literature review 这个作业要用 APA 7&#xff0c;想在保留 biblatex 的情况下区分有括号和无括号两种引用格式&#xff0c;即 [3] 中 \citet、\citep 的分别。 …

OSG交互:选中场景模型并高亮显示

1、目的 可以在osg视图中选中指定模型实体,并高亮显示。共分为两种,一种鼠标点选,一种框选。 2、鼠标点选 2.1 功能说明 生成两组对象,一组cow对象可以被选中,另一组robot不能被选中;点击cow对象被选中高亮,点击robot被选中不高亮;点击空白处,弹出“select nothing!…

rocketMq消息堆积处理方式

消息堆积常见于以下几种情况&#xff1a; &#xff08;1&#xff09;新上线的消费者功能有BUG&#xff0c;消息无法被消费。 &#xff08;2&#xff09;消费者实例宕机或因网络问题暂时无法同Broker建立连接。 &#xff08;3&#xff09;生产者短时间内推送大量消息至Broker…

PTA_乙级_1096

Q1&#xff1a;因数 在数学中&#xff0c;一个数的因数是能够整除该数的整数。换句话说&#xff0c;如果我们将一个数 a 除以另一个整数 b 而得到整数商&#xff0c;那么 b 就是 a 的因数。以下是一些例子&#xff1a; 1.因数的定义&#xff1a; 如果整数 b 可以被整数 a 整除&…

IP行业API助力于网络分析和数据挖掘

引言 在当今数字化时代&#xff0c;数据成为了企业、科研机构和政府决策者的重要资源&#xff0c;而IP行业API则成为了数据分析及挖掘的工具之一。IP行业API是一种能够查询IP地址所属的行业分类信息的应用程序接口&#xff0c;它能够提供在网络分析、用户行为分析及大数据挖掘…

奇异矩阵、非奇异矩阵

对于一个方阵A&#xff1a; 如果A的行列式等于0&#xff0c;称矩阵A为奇异矩阵如果A的行列式不等于0&#xff0c;称A 非奇异矩阵 也就是说&#xff0c;对于方阵A&#xff0c;如果它是满秩的&#xff0c;即它的秩等于矩阵的阶数&#xff0c;就是非奇异矩阵&#xff1b;如果秩小…