react入门+UMI

2023-11-07

React

一、创建项目、安装基本第三方库以及配置所需目录 

sudo npm i -g create-react-app    # npm下安装react环境
create-react-app react-demo        # 创建一个项目名为react-demo的react项目
cd react-demo                    # 进入此项目
npm start                        # 运行项目(项目运行后,查看项目文件和运行结果,查看完毕后,再进行下面操作)
npm run eject                    # 此时默认的项目结构会发生较大变化,注意观察前后变化
npm i react-router-dom            # react 路由器的DOM绑定(必安装)
npm i node-sass sass-loader axios es6-promise    # 使用sass和axios请求方式(根据个人情况决定是否安装,本人使用sass和axios)

配置所需目录

手动配置public和src
├── config                          # 配置文件夹
├── node_modules                    # node 依赖文件夹
  ├── ...                           # 各种npm的js库
├── public                          # 静态资源目录、入口文件目录
  ├── image                         # 静态图片存放
  ├── js                            # 本地js第三方库
  ├── favicon.ico                   # 浏览器标签栏图标
  ├── index.html                    # 入口 index.html 文件
  ├── manifest.json                 # 配置参数
├── scripts                         # npm 脚本文件夹
  ├── ...                           # 默认
├── src                             # 开发目录
  ├── api                           # 请求
    ├── index.js                    # 请求的js
  ├── components                    # 组件
  ├── config                        # 配置
    ├── index.js                    # 配置的js
  ├── router                        # 路由
    ├── index.js                    # 路由配置入口js
  ├── style                         # 样式
    ├── index.scss                  # css样式主文件
  ├── tools                         # 自定义js工具包
    ├── index.js                    # 自定义的js方法
  ├── views                         # 单页面应用
    ├── home.jsx                    # 首页jsx组件
  ├── App.js                        # dom 挂载文件
  ├── index.js                      # 入口文件
  ├── App.test.js                   # 测试文件
  ├── serviceWorker.js              # 注册服务文件,旧版本是registerServiceWorker.js
  ├── setupProxy.js                 # 配置代理
├── package-lock.json               # 包锁定文件,不用管。
├── package.json                    # 配置文件,有些内容在此配置
└──README.md                        # 说明文档,该文档非常丰富,建议由时间阅读

shell脚本配置

# react-src-catalog-building.sh
# 新建文件 react-src-catalog-building.sh,内容如下:(以下内容可以通过命令行执行)
cd src && mkdir api components config views router style tools    # 在src下,创建我们需要的文件夹
rm -r App.css index.css logo.svg            # 删除App.css App.test.js index.css logo.svg等无用文件
cd api && touch index.js && cd ../            # api => index.js
cd config && touch index.js && cd ../        # config => index.js
cd router && touch index.js && cd ../        # router => index.js
cd style && touch index.scss && cd ../        # style => index.scss
cd tools && touch index.js && cd ../        # tools => index.js
cd views && touch home.jsx && cd ../        # views => home.jsx
touch setupProxy.js
cd ../

# 运行shell文件 react-src-catalog-building

sh react-src-catalog-building.sh            # 如果是通过命令行执行上面内容,则不需要执行该命令

二、配置config相关

2.1 配置支持 @ 文件映射 src 目录
在根目录下的/config/webpack.config.js 文件中,找到 alias 的配置:
注意:旧版是/config/webpack.config.dev.js 文件和 /config/webpack.config.prod.js 文件中,找到 alias 的配置
alias: {
  ...
  '@': path.join(__dirname, '..', 'src'), // 添加这段内容
}
2.2 配置项目支持 scss 文件
新版你可以跳过这一步,因为它自己已经做了scss的支持
在根目录下的 /config/webpack.config.dev.js 文件和 /config/webpack.config.prod.js 文件中,找到 module 的配置

module: {
  strictExportPresence: true,
  rules: [
    { test: /\.scss$/, loaders: ['style-loader', 'css-loader', 'sass-loader'],},    // 再rules这个数组中第一个位置,添加这段内容
    ...
    {
      // "oneOf" will traverse all following loaders until one will
      // match the requirements. When no loader matches it will fall
      // back to the "file" loader at the end of the loader list.
      oneOf: [
        ...
        {
          exclude: [/\.(js|jsx|mjs)$/, /\.html$/, /\.json$/],   # 改为 exclude: [/\.(js|jsx|mjs)$/, /\.html$/, /\.json$/, /.scss$/], // 增加 /.scss$/ 来使其支持sass
          loader: require.resolve('file-loader'),
          options: {
            name: 'static/media/[name].[hash:8].[ext]',
          },
        },
      ]
    }
  ],
  ...
}


附1. 自定义的搭建react的快捷脚本
https://github.com/nongshuqiner/react-building-project-shell

UMI

umi,乌米,一个可插拔的企业级 react 应用框架
umi = react + redux + react-router + ts + dva + umi脚手架 + ant Design Pro + ant Design UI + umi-block
官网:https://umijs.org/zh/

相关链接:
umi
ant-design-pro
ant-design-pro github
pro-blocks
umi-blocks

node:8.10+(推荐nvm管理node版本)
npm

$ npm global add umi
$ umi -v   # 确保版本2.0.0+
$ mkdir my-umi-app && cd my-umi-app
$ npm create umi            # 使用 npm create umi 脚手架,创建模板
# Choose ant-design-pro
$ npm install  # 安装依赖,时间比较久
$ npm start  # visit http://localhost:8000

项目目录

├── config  # umi 配置,包含路由,构建等配置
│  ├── config  # 配置包含路由等
│  ├── ... # 其他
├── mock  # 本地模拟数据
├── public
│  └── favicon.png # Favicon
├── src
│  ├── assets  # 本地静态资源
│  ├── components  # 业务通用组件
│  ├── e2e # 集成测试用例
│  ├── layouts # 通用布局
│  ├── models  # 全局 dva model
│  ├── pages # 业务页面入口和常用模板
│  ├── services  # 后台接口服务
│  ├── utils # 工具库
│  ├── locales # 国际化资源
│  ├── global.less # 全局样式
│  └── global.ts # 全局 JS
├── tests # 测试工具
├── README.md
├── package.json
└── ... # 其他

可用脚本

npm start # 运行这个脚本会启动服务,自动打开默认浏览器展示你的页面。当你重新编辑代码后,页面还会自动刷新。
npm run build # 运行这个脚本将会编译你的项目,你可以在项目中的 dist 目录中找到编译后的文件用于部署。
npm run lint # 通过这个脚本来查看你的代码有哪些问题
npm test # 这个脚本会执行一系列测试,包括 e2e 测试。
npm run i18n-remove # 这个脚本将会尝试删除项目中所有的 i18n 代码,对于复杂的运行时代码,表现并不好,慎用。

主要目录和文件介绍

config 目录
├── config  # umi 配置,包含路由,构建等配置
│  ├── config  # 配置文件:包含路由、样式、proxy等
│  ├── defaultSettings # 默认设置:包括标题title、navTheme等
│  ├── plugin.config # webpack的Plugin配置
│  ├── themePluginConfig # 风格主题的配置

src 目录
src/components组件目录
src/components/Authorized组件
授权组件,路由权限的管理。

关系:
index.jsx -> Authorized(内容权限管理) -> CheckPermissions
          -> renderAuthorize(内容渲染)
          -> Secured(判断是否拥有权限访问此 view 权限) -> CheckPermissions
          -> CheckPermissions(通用权限检查方法) -> PromiseRender(promise渲染)

src/components/GlobalHeader组件
基础布局的头部,包含搜索、用户头像、语言切换。

├── src/components
├── ...
├── GlobalHeader  # 基础布局的头部
│  ├── AvatarDropdown  # 用户头像下拉菜单
│  ├── NoticeIconView  # 通知图标和通知消息视图
│  ├── plugin.config # webpack的Plugin配置
│  ├── RightContent  # 基础布局的头部核心:包含搜索、头像、语言选择

src/components/... 其他组件

HeaderDropdown:头部下拉菜单,用于用户头像、搜索等。
HeaderSearch:头部搜索组件。
NoticeIcon:头部通知组件。
PageLoading:加载组件。
SelectLang:语言切换组件。

src/layouts布局
src/layouts/BasicLayout布局
基础默认布局,菜单、顶部、内容、页脚。包含logo、菜单、面包屑等。
ant-design-pro的布局


src/layouts/SecurityLayout布局
安全布局,负责验证是否登录和登录后跳转加载,我们可以在这里写自己的登录认证规则。

src/layouts/... 其他布局
UserLayout: 用户布局,用于登录页。
BlankLayout: 空白布局,用于打印页面等不需要布局的页面。

src/locales
国际化资源语言,包含四种语言:简体中文、繁体中文、英语、葡萄牙语,如果使用国际化请注意它对诸如:菜单、消息提示等影响。如果你是国内用户,那么你可以忽略它。

src/models
全局 dva model
在 Ant Design Pro 中,一个完整的前端 UI 交互到服务端处理流程是这样的:

1.UI 组件交互操作;
2.调用 model 的 effect;
3.调用统一管理的 service 请求函数;
4.使用封装的 request.ts 发送请求;
5.获取服务端返回;
6.然后调用 reducer 改变 state;
7.更新 model。

至于dva是什么?请看这里:dva.js
这里我们只需要知道它里面的文件内容如下即可:
// model
{
  namespace: String, // 命名空间
  state: Object, // 状态
  reducer: Object, // 同步更新 state
  effects: Object, // 副作用:处理异步逻辑
  subscriptions: Object // 订阅数据源
}
这些文件被引用在src/pages/.umi/dva中。
我们以 models/global 为例:
namespace: 'global' 说明以下此处的dva命名空间为 global,即你调用的时候需要采用 global.XXX 的形式
其中的 state: {} 是存放状态的,也就是数据。
reducers 是用来更新 state 的,但是他只能是同步的。所以我们需要 effects 来进行异步更新
即:

state: {
collapsed: false,
notices: [],
}, // 存放状态和数据
reducers: { // 用来同步设置state
    changeLayoutCollapsed(
      state = {
        notices: [],
        collapsed: true,
      },
      { payload },
    ) {
      return { ...state, collapsed: payload };
    },

    saveNotices(state, { payload }) {
      return {
        collapsed: false,
        ...state,
        notices: payload,
      };
    },
    // ...
 }
  effects: { // 异步更新state,通过调用同步的reducers实现
    *fetchNotices(_, { call, put, select }) {
      const data = yield call(queryNotices);
      yield put({
        type: 'saveNotices',
        payload: data,
      });
      const unreadCount = yield select(
        state => state.global.notices.filter(item => !item.read).length,
      );
      yield put({
        type: 'user/changeNotifyCount',
        payload: {
          totalCount: data.length,
          unreadCount,
        },
      });
    },
    // ...
 }

src/pages
业务页面和常用模板
src/pages/document.ejs 默认html模板,umi 约定如果这个文件存在,会作为默认模板,内容上需要保证有 <div id="root"></div>,模板里可通过 context 来获取到 umi 提供的变量。
user user业务逻辑内容,里面包含login登录模块,如果你需要更换登录页,请在这里处理。
通过 umi block add [block url] --path=[target path] 添加的区块,将会被放置在pages目录下。

src/services
服务请求层,在 Ant Design Pro 中,后台接口服务需要写在services文件下。当然你也可以不那么做。

$ mkdir myapp && cd myapp
$ yarn create @umijs/umi-app    # 官方工具创建项目
# 或 npx @umijs/create-umi-app
$ yarn                           # 安装依赖
$ yarn start                    # 启动项目

在VSCode终端启动项目失败,根据图示可解决问题

yarn add @ant-design/pro-layout  #安装@ant-design/pro-layout
编辑 .umirc.ts 配置 layout: {}

import { defineConfig } from 'umi';
export default defineConfig({
  layout: {},    // 新加
  routes: [
    { path: '/', component: '@/pages/index' },
  ],
});

部署发布
yarn build  # 构建,构建产物默认生成到 ./dist 下
tree ./dist # 然后通过 tree 命令查看
yarn global add serve # 发布之前,可以通过 serve 做本地验证
serve ./dist  # 正常情况下应该是和执行 yarn start 时是一致的

Umi基础项目

.
├── package.json
├── .umirc.ts
├── .env
├── dist
├── mock
├── public
└── src
    ├── .umi
    ├── layouts/index.tsx
    ├── pages
        ├── index.less
        └── index.tsx
    └── app.ts

根目录

package.json

包含插件和插件集,以 @umijs/preset-@umijs/plugin-umi-preset- 和 umi-plugin- 开头的依赖会被自动注册为插件或插件集。

.umirc.ts

配置文件,包含 umi 内置功能和插件的配置。

.env

环境变量。

比如:

PORT=8888

COMPRESS=none

dist 目录

执行 umi build 后,产物默认会存放在这里。

mock 目录

存储 mock 文件,此目录下所有 js 和 ts 文件会被解析为 mock 文件。

public 目录

此目录下所有文件会被 copy 到输出路径。

/src 目录

.umi 目录

临时文件目录,比如入口文件、路由等,都会被临时生成到这里。不要提交 .umi 目录到 git 仓库,他们会在 umi dev 和 umi build 时被删除并重新生成。

layouts/index.tsx

约定式路由时的全局布局文件。

pages 目录

所有路由组件存放在这里。

app.ts

运行时配置文件,可以在这里扩展运行时的能力,比如修改路由、修改 render 方法等。

UmiJS
+ .umi
  + core     # 内部插件生成
  + pluginA  # 外部插件生成
  + presetB  # 外部插件生成
  + umi.ts   # 入口文件
可以在这里调试代码,但不要在 .git 仓库里提交他,因为他的临时性,每次启动 umi 时都会被删除并重新生成。
node v10.13+
通过官方工具创建项目:yarn create @umijs/umi-app # 或 npx @umijs/create-umi-app
安装依赖:yarn
启动项目:yarn start
在浏览器里打开 http://localhost:8000
编辑 .umirc.ts 配置 layout: {},并且需要安装 @ant-design/pro-layout
PS:config/config.ts对应UmiJS中配置文件.umirc.ts

1、部署发布
构建:yarn build
    构建产物默认生成到 ./dist 下,然后通过 tree 命令查看,tree ./dist
本地验证:发布之前,可以通过 serve 做本地验证
    $ yarn global add serve
    $ serve ./dist
    本地验证完,就可以部署了。你需要把 dist 目录部署到服务器上。

2、目录结构
.
├── package.json
├── .umirc.ts
├── .env
├── dist
├── mock
├── public
└── src
    ├── .umi
    ├── layouts/index.tsx
    ├── pages
        ├── index.less
        └── index.tsx
    └── app.ts

3、配置
Umi 在 .umirc.ts 或 config/config.ts 中配置项目和插件,支持 es6
项目配置不复杂,推荐.umirc.ts写配置;优先级更高
项目配置复杂,推荐配置写在config/config.ts

本地临时配置:可以新建 .umirc.local.ts,这份配置会和 .umirc.ts 做 deep merge 后形成最终配置。
    注:.umirc.local.ts 仅在 umi dev 时有效。umi build 时不会被加载。
注意
    config/config.ts 对应的是 config/config.local.ts
    .local.ts 是本地验证使用的临时配置,请将其添加到 .gitignore,务必不要提交到 git 仓库中
    .local.ts 配置的优先级最高,比 UMI_ENV 指定的配置更高

多环境多份配置
    可以通过环境变量 UMI_ENV 区分不同环境来指定配置。

4、运行时配置
运行时配置和配置的区别是他跑在浏览器端,基于此,我们可以在这里写函数、jsx、import 浏览器端依赖等等,注意不要引入 node 依赖。
配置方式:约定 src/app.tsx 为运行时配置。

5、路由
5.1 在 Umi 中,应用都是单页应用
5.2 页面地址的跳转都是在浏览器端完成的,不会重新请求服务端获取 html
5.3 html 只在应用初始化时加载一次。
5.4 所有页面由不同的组件构成,页面的切换其实就是不同组件的切换,只需要在配置中把不同的路由路径和对应的组件关联上

5.5 配置路由
5.5.1 在配置文件中通过 routes 进行配置,格式为路由信息的数组
比如:
export default {
  routes: [
    { exact: true, path: '/', component: 'index' },
    { exact: true, path: '/user', component: 'user' },
  ],
}
5.5.2 component,配置 location 和 path 匹配后用于渲染的 React 组件路径
    相对路径,会从 src/pages 开始找起
    如果指向 src 目录的文件,可以用 @,也可以用 ../
    比如 component: '@/layouts/basic',或者 component: '../layouts/basic',推荐用前者
5.5.3 exact:表示是否严格匹配,即 location 是否和 path 完全对应上
5.5.4 routes:配置子路由,通常在需要为多个路径增加 layout 组件时使用
5.5.5 redirect:配置路由跳转
5.5.6 wrappers:配置路由的高阶组件封装
5.5.7 title:配置路由的标题
5.5.8 页面跳转
5.5.9 hash 路由
5.5.10 Link 组件:注意:Link 只用于单页应用的内部跳转,如果是外部地址跳转请使用 a 标签
5.5.11 路由组件参数
    路由组件可通过 props 获取到以下属性,
    match,当前路由和 url match 后的对象,包含 params、path、url 和 isExact 属性
    location,表示应用当前处于哪个位置,包含 pathname、search、query 等属性
    history,同 api#history 接口
    route,当前路由配置,包含 path、exact、component、routes 等
    routes,全部路由信息
5.5.12 传递参数给子路由:通过 cloneElement,一次就好(Umi 2 时需要两次)

6、约定式路由
如果没有 routes 配置,Umi 会进入约定式路由模式,然后分析 src/pages 目录拿到路由配置
动态路由:约定 [] 包裹的文件或文件夹为动态路由
动态可选路由:约定 [ $] 包裹的文件或文件夹为动态可选路由
嵌套路由:Umi 里约定目录下有 _layout.tsx 时会生成嵌套路由,以 _layout.tsx 为该目录的 layout
            layout 文件需要返回一个 React 组件,并通过 props.children 渲染子组件
全局 layout:约定 src/layouts/index.tsx 为全局路由。返回一个 React 组件,并通过 props.children 渲染子组件
不同的全局 layout:仍可以在 src/layouts/index.tsx 中对 location.path 做区分,渲染不同的 layout 
404 路由:约定 src/pages/404.tsx 为 404 页面,需返回 React 组件
权限路由:通过指定高阶组件 wrappers 达成效果
扩展路由属性:支持在代码层通过导出静态属性的方式扩展路由

7、插件
插件的 id 和 key:每个插件都会对应一个 id 和一个 key,id 是路径的简写,key 是进一步简化后用于配置的唯一值。
比如插件 /node_modules/@umijs/plugin-foo/index.js,通常来说,其 id 为 @umijs/plugin-foo,key 为 foo。
启用插件:插件有多种启用方式
package.json 依赖:Umi 会自动检测 dependencies 和 devDependencies 里的 umi 插件
配置:在配置里可通过 presets 和 plugins 配置插件
环境变量:还可通过环境变量 UMI_PRESETS 和 UMI_PLUGINS 注册额外插件
检查插件注册情况:umi plugin list/umi plugin list --key 注意,需要安装umi,npm install -g umi

https://www.jianshu.com/p/3255c40b11d7

https://www.jianshu.com/p/311e3e41688d

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

react入门+UMI 的相关文章

  • C++ vector容器

    1 vector基本概念 vector 的数据结构和数组非常相似 也称为单端数组 不同之处在于数组是静态空间 而 vector 可以动态扩展 动态扩展 不是在原空间之后续接新空间 而是找更大的内存空间 然后将原数据拷贝新空间 释放原空间 使

随机推荐

  • 四位数码管3641AS的FPGA实现

    一 数码管介绍 四位数码管3641AS为一款共阴极的四位八段数码管 其具体的每一段为单个二极管 可通过压降实现点亮 通过控制单位多段二极管的点亮实现数字或字母等字符 共阴极 八段发光二极管的阴极端连接在一起 阳极端分开控制 使用时候公共端接
  • 这几款能制作思维导图的软件分享给你

    思维导图工具的优势在于它可以大大提高思考效率 使用思维导图工具 可以更好地组织和理解复杂的信息 并从中提取出重要的要素 此外 思维导图也可以帮助人们更好地记忆信息 接下来这篇文章 我将会介绍几款好用的思维导图软件 一起来看看吧 软件一 简道
  • Linux时间操作(time、gettimeofday)

    自 http blog chinaunix net space php uid 24148050 do blog id 320294 一 time函数 include
  • idea使用Markdown流程图

    环境 Windows10 idea2021 1 社区版 方法 其实主要就是让Markdown的mermaid生效 如何设置mermaid CTRL ALT S调出设置 搜索 Markdown 找到enable extend name 勾选后
  • Spark(30) -- Spark SQL中更多Parquet文件读写(scala)

    什么时候会用到 Parquet 在 ETL 中 Spark 经常扮演 T 的职务 也就是进行数据清洗和数据转换 为了能够保存比较复杂的数据 并且保证性能和压缩率 通常使用 Parquet 是一个比较不错的选择 所以外部系统收集过来的数据 有
  • Mysql this is incompatible with sql_mode=only_full_group_by

    MySQL的sql mode合理设置 sql mode是个很容易被忽视的变量 默认值是空值 在这种设置下是可以允许一些非法操作的 比如允许一些非法数据的插入 在生产环境必须将这个值设置为严格模式 所以开发 测试环境的数据库也必须要设置 这样
  • 标准库函数

    aplay apply 函数可以看作一个配置函数 你可以传入一个接收者 然后调用一系列函数来配置它以便使用 调用一个个函数类配置接收者时 变量名就省掉了 apply 能让每一个配置函数 都做用于接收者 这种行为叫做 相关作用域 apply
  • 01-iOS如何集成OpenCV

    转自 https www jianshu com p 13a302dfd8f0 OpenCV 是什么 简述 OpenCV是开源计算机视觉库 是一个非常强大的库 可跨平台使用 其中包含了数百种计算机视觉算法 OpenCV 是由C 编写 最早是
  • Redis配置与优化

    文章目录 Redis配置 优化 1 关系型数据库与非关系型数据库 1 1 定义 1 2 区别 1 3 产生背景 2 Redis 2 1 Redis简介 2 2 Redis优点 2 3 Redis缺点 2 4 Redis使用场景 2 5 Re
  • MQTT.fx连接阿里云

    第一步 查看阿里云设备 MQTT 参数 点击 设备 点击 设备信息 点击mqtt连接参数 查看 第2步 打开 MQTT fx 软件 点击 齿轮 点击 新建项目 输入项目名称 MQTT test 01 复制mqtt连接参数 clientId
  • GDAL库简介以及在Windows下编译过程

    GDAL Geospatial Data Abstraction Library 地理空间数据抽象库 是一个在X MIT许可协议下的开源栅格空间数据转换库 官网http www gdal org index html 也可参考GitHub
  • Could not connect to ‘192.168.203.128‘ (port 22): Connection failed.

    问题展示 请在保证虚拟机和宿主机之间完美连接之后 再看此篇文章 如何保证呢 操作请看这篇 Linux虚拟机与Windows宿主机间的通信 如何验证呢 当然是 ping 啊 虚拟机 ping 主机 通 主机 ping 虚拟机 通 通常情况下
  • obj文件

    obj 文件是一种常用的 3D 模型文件格式 它由许多顶点坐标 法向量和纹理坐标组成 可以用来描述复杂的三维模型 obj 文件是一种文本文件 可以使用纯文本编辑器打开 也可以使用专门的 3D 模型软件来打开 编辑和渲染 obj 文件通常与
  • 1800亿参数,世界顶级开源大模型Falcon官宣!碾压LLaMA 2,性能直逼GPT-4

    来源 新智元 导读 一经发布 地表最强开源模型Falcon 180B直接霸榜HF 3 5万亿token训练 性能直接碾压Llama 2 一夜之间 世界最强开源大模型Falcon 180B引爆全网 1800亿参数 Falcon在3 5万亿to
  • 电路中的输入与输出电阻计算

    电路的输入与输出电阻计算 前言 一 输入电阻 1 一端口网络的概念 一端口网络的特性 输入电阻的计算方法 前言 本人是大二电子系的一个学生 大二上在学习模电 当学习到各种BJT电路 FET电路 差分放大电路或负反馈放大电路时 新学习的增益计
  • 生信学习——生信人的20个R语言习题(上)(附详细答案解读)

    题目目录 1 安装一些R包 2 了解ExpressionSet对象 比如CLL包里面就有data sCLLex 找到它包含的元素 提取其表达矩阵 使用exprs函数 查看其大小 3 了解 str head help函数 作用于第二步提取到的
  • 第 14 篇 : 安装Docker

    1 安装 任选其一 从160 165依次安装 批量安装 1 1 按照官方文档安装 Install on CentOS 1 2 通过阿里云镜像安装 推荐 sudo yum remove docker docker client docker
  • 陶氏公司将出席2023第二届中国汽车碳中和峰会

    2023第二届中国汽车碳中和峰会将于10月19日 20日在上海举办 本次峰会将为行业领导者 政策制定者和专家提供一个平台 讨论汽车行业减少碳排放的策略 专家们将从政策 供应链 ESG 替代能源解决方案 汽车材料创新 法律等不同领域分享碳中和
  • 01.个人项目难点汇总2 css定制科技感缺角边框

    01 CSS3实现缺角矩形 折角矩形以及缺角边框 前言 前几天偶然看到缺角矩形这个功能 脑袋中第一想法是 搞个绝对定位的伪元素 哪里需要挡哪里 或者找UI小哥聊聊天 忽然灵光一闪 想起之前翻过的 CSS揭秘 一书 记得有这个篇章 遂有了此文
  • react入门+UMI

    React 一 创建项目 安装基本第三方库以及配置所需目录 sudo npm i g create react app npm下安装react环境 create react app react demo 创建一个项目名为react demo