react学习笔记(20) - 反向代理以及CSS模型
反向代理
一般来讲,所有的网站和服务器都是设有跨域限制的,但我们自己做项目时的运行和调试基本是部署在本地服务器上的(
localhost:3000
),如果此时的前端页面向设有跨域限制的后端服务器请求数据,就会受到同源规则的限制,无法获取数据,也就是存在了跨域问题,那如何解决呢?我们知道,服务器向服务器请求数据是不存在跨域问题的,因此我们可以使用本地服务器向远端服务器请求数据,再由本地的服务器向本地的项目提供数据,这就解决了跨域问题,也就是我们所说的
反向代理
实现流程
- 安装
中间件
npm install http-proxy-middleware --save |
在
src
目录下创建setupProxy.js
文件设置
setupProxy.js
const { createProxyMiddleware } = require('http-proxy-middleware'); |
- 前端页面向指定服务器请求数据(省去域名)
import React, { Component } from 'react' |
结果展示:
没有配置代理(
setupProxy.js
)时,请求数据失败,存在跨域问题配置了代理(
setupProxy.js
)成功请求到数据!
CSS Module
React
中CSS
的规则都是全局
的,任何一个组件的样式规则,都对整个页面有效,这可能会导致大量的冲突。也就是说如果我有两个css
文件,它们的中的一些样式名是一样的,那么就会被覆盖,简单的解决办法就是将样式的命名变得复杂且不重复,但这样样式多了也很难避免重复,且命名也不会太好看。- 那么这个时候就推荐使用
CSS Modules
了CSS Modules
的做法就是通过配置将.css
文件进行编译,编译后在每个用到css
的组件中的css
类名都是独一无二的,从而实现CSS
的局部作用域。
在组件中的两种样式使用方法
- 全局样式 (默认)
样式文件命名规则: xxx.css |
- 局部样式(
css modules
)
文件命名规则: xxx.module.css (多加上一个module) |
注:
css modules
会默认给类名加上一个唯一标识符(哈希字符串),从而实现类名不重复
css modules
语法:
:global(.className)
CSS Modules
允许使用:global(.className)
的语法,声明一个全局规则。凡是这样声明的class
,都不会被编译成哈希字符串。代码如下:
.title { |
:local(.className)
CSS Modules
还提供一种显式的局部作用域语法:local(.className)
,
下面代码等同于上面的代码:
:local(.title) { |
- 继承
继承在 CSS Modules
中,一个选择器可以继承另一个选择器的规则,这称为”组合”(”composition
“)。使用 composes
属性进行继承
.className { |
继承属性同样可以跨文件实现对应的样式继承
/* 跨文件样式继承 */ |
组件使用样式
import React from 'react' |
最终会看到红色的h1
在蓝色的背景上
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0许可协议。转载请注明来自 肥林の仓库