国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【React】React18+Typescript+craco配置最小化批量引入Svg并應(yīng)用的組件

這篇具有很好參考價(jià)值的文章主要介紹了【React】React18+Typescript+craco配置最小化批量引入Svg并應(yīng)用的組件。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言

無論是哪種 Web UI 框架都不可避免的要與 Svg 打交道,那么批量引入才更方便管理 Svg。

創(chuàng)建React + Typescript項(xiàng)目

npx create-react-app my-ts-app --template typescript

通過require.context實(shí)現(xiàn)批量引入Svg

// src/assets/icons/index.ts
const requireAll = (requireContext: __WebpackModuleApi.RequireContext) => requireContext.keys().map(requireContext)
const icons = require.context('./', false, /\.svg$/)
requireAll(icons)

export {}

【React】React18+Typescript+craco配置最小化批量引入Svg并應(yīng)用的組件,React,react.js,typescript,前端

安裝@types/webpack-env解決類型報(bào)錯(cuò)

npm install --save @types/webpack-env

安裝craco,覆蓋React原有的webpack配置文件

npm i -D @craco/craco @craco/types

修改package.json腳本快捷方式為craco啟動(dòng)項(xiàng)目

"scripts": {
-  "start": "react-scripts start"
+  "start": "craco start"
-  "build": "react-scripts build"
+  "build": "craco build"
-  "test": "react-scripts test"
+  "test": "craco test"
}

安裝svg-sprite-loader生成Svg雪碧圖

npm install svg-sprite-loader -D

安裝svgo-loader去除Svg的fill和stroke屬性

npm install svgo-loader --save-dev

新增craco.config.js配置文件

const path = require('path');

module.exports = {
    webpack: {
        alias: {
            '@': path.resolve(__dirname, 'src'),
        },
        configure: (webpackConfig) => {
            const oneOfRule = webpackConfig.module.rules.find((rule) => rule.oneOf)
            if (oneOfRule) {
                oneOfRule.oneOf.splice(0, 0, {
                    test: /\.svg$/,
                    include: path.resolve(__dirname, "src/assets/icons"),
                    use: [
                        {
                            loader: 'svg-sprite-loader',
                            options: {
                                symbolId: "icon-[name]"
                            }
                        },
                        {
                            loader: 'svgo-loader', options: {
                                plugins: [
                                    {
                                        name: 'removeAttrs',
                                        params: {
                                            attrs: '(fill|stroke)'
                                        }
                                    }
                                ]
                            }
                        }
                    ]
                })
            }
            return webpackConfig
        },
    }
}

封裝Icon組件應(yīng)用Svg圖標(biāo)

// src/components/Icon/index.tsx
import React from "react";
import classes from './index.module.css'

interface IconProps {
    name: string
    width: string
    height?: string
    fill?: string
}

const Icon = ({ name, width, height, fill }: IconProps) => {
    return (
        <svg className={classes.icon} aria-hidden="true" width={width} height={height}>
            <use xlinkHref={'#icon-' + name} style={{color: fill}}></use>
        </svg>
    )
}

export default Icon
/* src/components/Icon/index.module.css */
.icon {
    vertical-align: -0.15em;
    fill: currentColor;
    overflow: hidden;
    font-size: 0;
}

在index.tsx入口文件中引入批量引入Svg的函數(shù)

// src/index.tsx
import '@/assets/icons/index';

在App.tsx中引入Icon組件并應(yīng)用

// src/App.tsx
import React from 'react';
import Icon from '@/components/Icon/index'
import './App.css';

function App() {
    return (
        <div className="App">
            <Icon name='p_ding' width="30px" height='30px' fill="red" />
            <Icon name='p_book' width="30px" height='30px' />
        </div>
    );
}

export default App;

【React】React18+Typescript+craco配置最小化批量引入Svg并應(yīng)用的組件,React,react.js,typescript,前端

修改tsconfig.json新增別名@解決報(bào)錯(cuò)

{
  "compilerOptions": {
    "target": "es5",
    "lib": [
      "dom",
      "dom.iterable",
      "esnext"
    ],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "noFallthroughCasesInSwitch": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react-jsx",
    "baseUrl": "./src",
    "paths": {
        "@/*": ["./*"]
    }
  },
  "include": [
    "src"
  ]
}

【React】React18+Typescript+craco配置最小化批量引入Svg并應(yīng)用的組件,React,react.js,typescript,前端

啟動(dòng)項(xiàng)目,目錄結(jié)構(gòu)如下

【React】React18+Typescript+craco配置最小化批量引入Svg并應(yīng)用的組件,React,react.js,typescript,前端

【React】React18+Typescript+craco配置最小化批量引入Svg并應(yīng)用的組件,React,react.js,typescript,前端
【React】React18+Typescript+craco配置最小化批量引入Svg并應(yīng)用的組件,React,react.js,typescript,前端文章來源地址http://www.zghlxwxcb.cn/news/detail-846198.html

參考

  • https://ryanhutzley.medium.com/dynamic-svg-imports-in-create-react-app-d6d411f6d6c6
  • https://github.com/airbnb/babel-plugin-inline-react-svg/issues/51
  • https://blog.shianqi.com/2017/12/13/Webpack/SVG-sprite/
  • https://pganalyze.com/blog/building-svg-components-in-react
  • https://juejin.cn/post/6844904194747400199
  • https://blog.csdn.net/qq_44883318/article/details/132202175
  • https://juejin.cn/post/7035808121272893477
  • https://github.com/dilanx/craco/issues/395
  • https://segmentfault.com/a/1190000023807589
  • https://blog.csdn.net/qq_39953537/article/details/93760188
  • https://juejin.cn/post/7207336474150273061
  • https://juejin.cn/post/6918723151732391950#heading-0
  • https://juejin.cn/post/6981836039463632932
  • https://segmentfault.com/a/1190000039850941

總結(jié)

  1. 配置別名需要tsconfig.json和craco.config.js一起配合
  2. 批量引入組件或者資源通過require.context函數(shù)實(shí)現(xiàn)
  3. module css實(shí)現(xiàn)組件的私有樣式,相當(dāng)于Vue中 scoped 作用域

到了這里,關(guān)于【React】React18+Typescript+craco配置最小化批量引入Svg并應(yīng)用的組件的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • QT最小化程序到托盤運(yùn)行

    QT最小化程序到托盤運(yùn)行

    實(shí)現(xiàn)程序關(guān)閉時(shí)最小化托盤的功能 托盤實(shí)現(xiàn)顯示主頁(yè)面和退出的功能 支持?jǐn)U展,直接引用TrayIcon類即可,對(duì)外暴露接口 單例實(shí)現(xiàn),可復(fù)用 注:博主所有資源永久免費(fèi),若有幫助,請(qǐng)點(diǎn)贊轉(zhuǎn)發(fā)是對(duì)我莫大的幫助 注:博主本人學(xué)習(xí)過程的分享,引用他人的文章皆會(huì)標(biāo)注原作者

    2024年02月05日
    瀏覽(29)
  • 捕獲最小化窗口的縮略圖畫面

    捕獲最小化窗口的縮略圖畫面

    : capture minimized window window thumbnail IsIconic? 最小化的窗口,API GetClientRect 返回的窗口尺寸是0x0,故無法通過GetDC+BitBlt捕獲到窗口畫面。 但是 Agora/zoom/tencentMeeting 都可以拿到最小化窗口的縮略圖。經(jīng)確認(rèn)這個(gè)程序并沒有注入任何dll到目標(biāo)窗口,且也沒有臨時(shí)顯示最小化了

    2024年02月07日
    瀏覽(27)
  • LabVIEW開發(fā)最小化5G系統(tǒng)測(cè)試平臺(tái)

    LabVIEW開發(fā)最小化5G系統(tǒng)測(cè)試平臺(tái)

    LabVIEW開發(fā)最小化5G系統(tǒng)測(cè)試平臺(tái) 由于具有大量存儲(chǔ)能力和數(shù)據(jù)的應(yīng)用程序的智能手機(jī)的激增,當(dāng)前一代產(chǎn)品被迫提高其吞吐效率。正交頻分復(fù)用由于其卓越的品質(zhì),如單抽頭均衡和具有成本效益的實(shí)施,現(xiàn)在被廣泛用作物理層技術(shù)。這些好處是以嚴(yán)格的同步、正交性和高功耗

    2024年02月12日
    瀏覽(19)
  • Qt實(shí)現(xiàn)最小化窗口到托盤圖標(biāo)

    Qt實(shí)現(xiàn)最小化窗口到托盤圖標(biāo)

    目錄 前言: 1.先看效果圖 2.大致思路以及實(shí)現(xiàn)流程 3.具體代碼以及解釋 4.總結(jié) 使用QT開發(fā)桌面軟件,將軟件最小化至托盤這樣的功能的是比較常見的,今天自己實(shí)現(xiàn)一下這個(gè)功能,并進(jìn)行記錄總結(jié)。 ?主要功能就是當(dāng)軟件開始運(yùn)行, 在系統(tǒng)托盤會(huì)自動(dòng)出現(xiàn)一個(gè)關(guān)于本軟件的

    2023年04月08日
    瀏覽(26)
  • unity發(fā)布設(shè)置(最小化、置頂、限制單開)

    unity發(fā)布設(shè)置(最小化、置頂、限制單開)

    1. 勾上下圖標(biāo)紅處,發(fā)布后可防止按windows鍵縮小 ?2.發(fā)布后程序默認(rèn)最小化 3.發(fā)布的程序只能開一個(gè)進(jìn)程

    2024年02月12日
    瀏覽(27)
  • 最小化安裝Linux系統(tǒng)初始化腳本

    目錄 最小化安裝Linux系統(tǒng)初始化腳本 注:此腳本適用于centos 7/8、Ubuntu1804,具體需要根據(jù)實(shí)際情況進(jìn)行測(cè)試調(diào)整。 此腳本包含的功能: 允許 root 用戶使用 ssh 登錄 關(guān)閉 selinux 關(guān)閉防火墻 設(shè)置 ps1 設(shè)置默認(rèn)編輯器為 vim 自定義 vim 自定義歷史命令 修改內(nèi)核參數(shù) 設(shè)置資源限制 修

    2024年02月12日
    瀏覽(27)
  • leetcode 2616. 最小化數(shù)對(duì)的最大差值

    leetcode 2616. 最小化數(shù)對(duì)的最大差值

    在數(shù)組nums中找到p個(gè)數(shù)對(duì),使差值絕對(duì)值的和最小。 思路: 最小差值應(yīng)該是數(shù)值相近的一對(duì)數(shù)之間產(chǎn)生,讓數(shù)值相近的數(shù)字盡量靠在一起方便計(jì)算,所以需要排序。 這里不去直接考慮一對(duì)對(duì)的數(shù)字,而是直接考慮差值的取值。 用binary search搜索一個(gè)差值。 左邊界是0,右邊界

    2024年02月13日
    瀏覽(33)
  • 【深度優(yōu)先搜索】【圖論】【樹】2646. 最小化旅行的價(jià)格總和

    【深度優(yōu)先搜索】【圖論】【樹】2646. 最小化旅行的價(jià)格總和

    【數(shù)位dp】【動(dòng)態(tài)規(guī)劃】【狀態(tài)壓縮】【推薦】1012. 至少有 1 位重復(fù)的數(shù)字 深度優(yōu)先搜索 圖論 樹 現(xiàn)有一棵無向、無根的樹,樹中有 n 個(gè)節(jié)點(diǎn),按從 0 到 n - 1 編號(hào)。給你一個(gè)整數(shù) n 和一個(gè)長(zhǎng)度為 n - 1 的二維整數(shù)數(shù)組 edges ,其中 edges[i] = [ai, bi] 表示樹中節(jié)點(diǎn) ai 和 bi 之間存在

    2024年02月19日
    瀏覽(21)
  • mac 最小化全部程序回到桌面(基于alfred workflow)

    mac 最小化全部程序回到桌面(基于alfred workflow)

    換到 mac 系統(tǒng)之后,很多快捷鍵根本就不好用,組合太多了,除了 cmd + Q/W/A/S/X/R/Z/C/V ,個(gè)人認(rèn)為其它的真的一坨屎。像我的需求就是,開的窗口太多了,我需要全部最小化,再重新打開我需要那個(gè)窗口。而 Windows 上的 win + D 就是很符合我的需求,于是我研究一下 mac 怎么實(shí)現(xiàn)

    2024年04月17日
    瀏覽(21)
  • debian12 最小化安裝桌面 i3wm

    怕記不住,先臨時(shí)記錄一下,還未整理,先湊合著看 debian12 最小安裝 i3wm 一、先安裝 debian12 最小安裝 軟件包只選擇最后的兩個(gè) SSH服務(wù),和管理工具 安裝后查看IP,并用另一臺(tái)電腦 ssh 連接操作,這樣比較方便 ip address 更新為國(guó)內(nèi)源,并更新系統(tǒng) apt update apt upgrade -y 二、安裝

    2024年02月04日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包