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

文件目录

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'
             ),
           },

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

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

相关文章

解决Web server failed to start. Port XXXX was already in use.

这句错误描述意思是&#xff1a;当前程序的端口号被占用了&#xff0c;需要将占用该端口的程序停止掉才行。 解决方案&#xff1a; 1.winR键调出运行窗口&#xff0c;输入cmd进入命令行: 2.输入命令netstat -ano|findstr "XXXX"查看“XXXX”对应端口的程序占用情况…

winui3开发笔记(二)自定义标题栏

参考文章链接&#xff1a;https://www.programminghunter.com/article/46392310600/ 注意事项 获取 AppWindowTitleBar 的实例并设置其颜色属性时&#xff0c;InitializeTitleBar(AppWindow.TitleBar);&#xff0c;只适用于Windows App SDK 1.2及以上&#xff0c;所以如果用w…

Linux文件系统

文章目录 引言磁盘文件系统每个分组(一个block group)中存的都是什么目录文件 软链接&#xff1a;软链接应用场景 硬链接硬链接应用场景硬链接和软链接的区别 引言 在此之前我们谈论重定向等问题都是指被打开的文件&#xff0c;现在我们来学习一下未被打开的文件&#xff0c;以…

【Proteus仿真】【51单片机】水质监测报警系统设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使用按键、LED、蜂鸣器、LCD1602、PCF8591 ADC、PH传感器、浑浊度传感器、DS18B20温度传感器、继电器模块等。 主要功能&#xff1a; 系统运行后&…

【GUI软件开发】小红书评论采集:自动采集1w多条,含二级评论!

文章目录 一、爬取目标1.1 效果截图1.2 演示视频1.3 软件说明 二、代码讲解2.1 爬虫采集模块2.2 软件界面模块2.3 日志模块 三、附完整源码及软件 一、爬取目标 您好&#xff01;我是马哥python说 &#xff0c;一名10年程序猿。 我用python开发了一个爬虫采集软件&#xff0c…

矩阵起源荣获第八届“创客中国”深圳市中小企业创新创业大赛三等奖

近日&#xff0c;2023年第八届“创客中国”深圳市中小企业创新创业大赛圆满落下帷幕&#xff0c;矩阵起源&#xff08;深圳&#xff09;信息科技有限公司凭借项目”MatrixOne 新一代超融合异构云原生数据库”荣获企业组三等奖。 本届大赛由深圳市工业和信息化局、深圳市中小企业…

如何用Python3+requests+unittest实现接口自动化测试实战

一、Requests介绍 首先让我们来看 Requests 官方的介绍&#xff1a; Requests is an elegant and simple HTTP library for Python, built for human beings. 翻译过来就是&#xff1a;Requests 是为人类写的一个优雅而简单的 Python HTTP 库。这个介绍很直白了&#xff0c;…

ElasticSearch文档分析

ElasticSearch文档分析 包含下面的过程&#xff1a; 将一块文本分成适合于倒排索引的独立的 词条将这些词条统一化为标准格式以提高它们的“可搜索性”&#xff0c;或者 recall 分析器执行上面的工作。分析器实际上是将三个功能封装到了一个包里&#xff1a; 字符过滤器 首先&a…

乐优商城(三)品牌管理

1. 品牌的新增 1.1 url 异步请求 点击品牌管理下的新增品牌&#xff0c;填写品牌信息后提交 2.打开浏览器控制台 由此可以得知&#xff1a; 请求方式&#xff1a;POST请求路径&#xff1a;/item/brand请求参数&#xff1a;{name: “测试品牌”, image: “”, cids: “76,32…

云端生成式 AI – 基于 Amazon EKS 的 Stable Diffusion 图像生成方案

Stable Diffusion 是当下生成式 AI 领域最受欢迎的开源多模态语言-图像模型&#xff0c;由于其易用的接口和良好的使用体验&#xff0c;受到了开源社区和广大设计行业从业者的追捧。Stable Diffusion 模型版本正在快速迭代&#xff0c;并带动了各行各业的生产力变革。目前市场上…

SAP 40策略测试及简介

相信很多很多的行业中都会用到40策略按库存生产,接下来我们将详细的测试40策略 1、首先准备好成品物料AB2。 2、创建BOM—cs01 3、创建主配方C202 ,如果是离散制造的话就是创建工艺路线CA01 4、创建生产版本C223 5、同样的AB2物料增加库存20KG。 6、创建计划独立需求MD…

微信智能机器人开发-基于E云管家,实现强大的个微管理

本文介绍了如何利用E云管家开发一个功能丰富的微信智能机器人。E云管家是一个开发协议&#xff0c;为微信机器人提供了强大的功能支持&#xff0c;包括关键字回复、自动通过好友和自动发朋友圈等特性。我们将通过一个简单的示例演示如何在E云管家下实现这些功能&#xff0c;并附…

EMERSON艾默生变频器维修M600/M701/M702

艾默生变频器维修常见系列&#xff1a; EV1000 系列&#xff1a;体积小&#xff0c;操作简便&#xff0c;适用于塑料机械、纺织机械、烟草机械、陶瓷机械、制药机械食品机械、印刷机械、包装机械、空调等专用设备配套。 EV2000 系列&#xff1a;功率范围广&#xff0c;功能更…

2020年五一杯数学建模B题基于系统性风险角度的基金资产配置策略分析解题全过程文档及程序

2020年五一杯数学建模 B题 基于系统性风险角度的基金资产配置策略分析 原题再现 近年来&#xff0c;随着改革开放程度的不断提高&#xff0c;我国经济运行中的各种风险逐渐暴露并集中传导和体现于金融领域。党的“十九大”报告提出“守住不发生系统性金融风险的底线”要求&am…

企业组建客服中心,需要考虑哪些问题?

随着市场竞争的加剧&#xff0c;企业越来越注重客户服务。因此&#xff0c;组建一个专业的客服中心已成为企业的一个重要战略举措。然而&#xff0c;这个任务不仅需要考虑技术和人员方面的问题&#xff0c;还需要考虑许多其他的因素。在本文中&#xff0c;我们将探讨企业在组建…

使用双动态令牌混合器学习全局和局部动态以进行视觉识别

TransXNet: Learning Both Global and Local Dynamics with a Dual Dynamic Token Mixer for Visual Recognition 1、问题与解决2、引言3、方法3.1 双动态令牌混合器(D- Mixer)3.2 IDConv(Input-dependent Depthwise Convolution)3.3 Overlapping Spatial Reduction Attention …

Java 身份证号校验,根据身份证号识别出生地

Java 身份证号校验&#xff1a; import org.apache.commons.lang.StringUtils;import java.util.Calendar; import java.util.Collections; import java.util.HashMap; import java.util.Map;/*** desc 身份证工具类* auth llp* date 2022/7/7 16:13*/ public class IdCardNum…

神仙打架!腾讯云阿里云谁更棋高一着?

现在&#xff0c;腾讯云和阿里云都在打价格战&#xff0c;推出了一系列的优惠政策。其中&#xff0c;腾讯云服务器只需要88元&#xff0c;而阿里云服务器也只需要99元。这么便宜的价格&#xff0c;是不是让你心动不已呢&#xff1f; 腾讯云的88元服务器&#xff1a;https://te…

MySQL优化方案

Mysql优化 一、连接配置优化1.服务端配置2.客户端优化 二、架构优化1.使用缓存2.做读写分离&#xff08;集群、主从复制&#xff09;3.分库分表3.1.垂直分库3.2.垂直分表3.3.水平分表3.4.水平分库 4.消息队列削峰 三、优化器——SQL分析与优化1.慢查询优化1.1.配置慢查询日志1.…

第三方支付支付宝的信息安全分析

随着信息技术的进步&#xff0c;网络结算方式也在迅速发展。网上结算虽然便捷快速&#xff0c;但是如果没有保障的平台或者法律的支持&#xff0c;双方在没有约束的情况下&#xff0c;就会导致拖延、折扣或者拒付等许多经济事件的发生&#xff0c;由此第三方支付就随之产生。第…