精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如果我放棄 React,那一定只有一個原因

開發 前端
我研究了一下,看看能不能直接在 React 組件中直接使用 class,而不是 ??className??,這樣我的代碼演示不就對味兒了嗎?這一次,折騰了一會兒,我還真研究出來了!

React 有一個我忍了很久的痛點。如果有一天,我決定放棄 React 轉向其他的框架,那么一定是這個痛點我終于忍不了了。

這個痛點就是 className。

<div className='relative pt-16'></div>

特別是最近我正在寫一本關于 CSS 的專欄時,這個痛點已經把我逼到了幾乎忍受不了的程度。

由于我的網站里,為了確保一致性、真實性、有效性,文章里的案例全部都是直接使用的內嵌案例的真實代碼,但是網站是用 React 來寫的,因此能夠直接運行的代碼也是 React 組件,展示出來的也就是 React 的代碼。

但是這本專欄是專門介紹 CSS 的,如果代碼中展示出來的是使用的 className,反正我不知道其他人是什么感受,我是越看越別扭,總感覺哪哪哪都不對勁。

所以我就想要研究一下,看看能不能直接在 React 組件中直接使用 class,而不是 className,這樣我的代碼演示不就對味兒了嗎?

這一次,折騰了一會兒,我還真研究出來了!
export default function Page() {
  return (
    <div class='relative pt-16'>
      <div class="fixed inset-0 -z-10">
        <div class="absolute inset-0 bg-[linear-gradient(to_right,#80808012_1px,transparent_1px),linear-gradient(to_bottom,#80808012_1px,transparent_1px)] bg-[size:40px_40px]"></div>
      </div>
      ...
    </div>
  )
}

我們先來了解一下 className 的歷史原因,以及使用 class 之后可能會存在的問題,最后再給大家介紹具體如何操作。

1.歷史原因

className 在 React 社區中爭議了很多年,但是在設計之初,據說是為了在 token 層面,與聲明類的關鍵字 class 區分開來,因此選擇了重命名為 className

class MyComponent extends Component {
  // ...
}

不過除此之外,dan 在 github 中有提過另外一個理由。如下所示,在 JavaScript 中,給 DOM 設置屬性有兩種方式,一種是 property,另外一種 attribute。

node.value = 10; // setting a property
node.setAttribute('value', '10'); // setting an attribute

而 JSX 由于被約定為是 JS 語法的擴展,因此,React 團隊認為使用 JS 默認的 className 字段給 DOM 設置屬性比較合適。

node.className = ''  // 表現為 property,而非 attribute

2.爭議

盡管 dan 為此解釋了很多次,但許多 React 開發者并不為此買賬,在社區中強烈要求能夠在 JSX 中使用 class

并且在后續的更新中,提議將 className 修改為 class 的聲音越來越大。

React 團隊為此不得不做出了妥協。

因此,在 React 17/18 的版本中,其實我們就可以直接在 JSX 中使用 class 了。但是他們又沒完全妥協,選擇的方式是,你可以用,代碼也能正常運行,但是 React 會給你報錯 ~ 就很惡心

dan 的解釋是,

如果 React 團隊毫無預警的同時支持 class 與 className,會在 React 生態中造成巨大的分歧。并不是所有的三方庫都會同時兼容這兩個方案,如果你使用的某一個三方庫不兼容 class,那么就會導致樣式的傳遞中斷,出現問題。

React 團隊無法完全左右社區,對于這種沖突無能為力,因此,長期以來,class 仍然以預警的方式存在。

但是,忍了 7 年了,我已經忍不了了,我決定不管要付出什么樣的代價,必須要用 class,哪怕最后放棄使用 react。

那為了使用 class,我們要做什么額外的事兒呢?

3.弊端以及如何解決

在這之前,我們要明確,React 中,是支持直接使用 class 的。因此從功能的角度上而言,我們啥也不需要做,直接用就可以了。

但是當你直接使用之后,你會遇到一堆麻煩事兒需要解決。

首先,如果你的項目中使用了 TypeScript,他會瘋狂報錯,為了解決這個問題,我們要去修改 TypeScript 的類型聲明。

在 @types/react 這個庫中,我們在 HTMLAttributes 這個類型下面新增 class 字段。

interface HTMLAttributes<T> extends AriaAttributes, DOMAttributes<T> {
  ...
  className?: string | undefined;
  class?: string | undefined;
  ...
}

處理好之后就搞定了。不過手動修改有一個比較麻煩的地方,就是每次你重新 install 之后,這段代碼就會被覆蓋,又還原成之前的樣子。那么這個時候你有兩個選擇,

第一,由于修改起來比較簡單,而且 install 頻率也非常低,因此你可以每次都手動修改一下。

第二,你在 install 時執行一個本地腳本,用 node 代碼自動去插入這段邏輯。

接下來的一個問題就是 eslint 等語法檢測規則可能會報錯,我們可以修改 ESLint 配置文件以消除這個錯誤。

"react/no-unknown-property": ["off"]

然后就是在開發環境中,console 面板里會報錯,如下所示:

為了解決這個問題,我們需要在項目入口處,重寫 console.error 的報錯規則,具體代碼我也已經研究出來了,分享給大家。

const originalError = console.error;

console.error = function(...args) {
  const ignorePatterns = [
    'Invalid DOM property `%s`. Did you mean `%s`?',
    'class',
    'className'
  ];

  let shouldIgnore = true;

  ignorePatterns.forEach((pattern, index) => {
    if (typeof args[index] !== 'string' || !args[index].includes(pattern)) {
      shouldIgnore = false;
    }
  });

  if (!shouldIgnore) {
    originalError.apply(console, args);
  }
};

這段代碼僅會消除 class 的報錯,而不影響其他。

到這里,基本上所有的報錯都解決掉了。

當我在群里和朋友圈分享這個的時候,有朋友問我是不是引入了什么三方工具或者插件,或者會不會影響編譯結果,現在大家知道了,我沒有用任何三方工具,只是修改了一些無關痛癢的報錯提示。

并且,對于代碼執行、編譯不會有任何影響。

最后一個問題,如果你正在開發底層組件庫,并且決定支持 className 的傳入時,這里還會遇到一個新的問題。一個就是你需要同時支持 class 的傳入,并且,當你使用結構時,必須對 class 進行重命名

const { class: cls } = props;

這個小的細節是 React 團隊所擔心的,會引起社區分歧的核心原因。但是如果是個人項目,你可以完全把控你的代碼細節,那么這個分歧對于個人來說并不會有太大的影響。

4.總結

這是一個個人偏好的操作,我并不推薦大家像我一樣使用。如果你也跟我一樣討厭 className,并且決定在項目中使用 class,可以參考一下我的做法,我基本上把潛在的隱患都考慮到了,放心使用是沒問題的。

責任編輯:姜華 來源: 這波能反殺
相關推薦

2011-04-07 09:32:49

遞歸

2018-01-02 10:46:24

微信騰訊表情

2020-08-30 14:31:40

Python編程語言開發

2013-08-09 10:44:55

創始人創業獨立創業

2018-05-23 11:43:59

數據庫

2022-02-18 10:52:52

Elastic亞馬遜AWS

2020-08-18 11:21:28

數據挖掘機器學習算法

2021-04-07 20:01:23

Go變量常量

2017-10-16 12:52:51

2017-09-11 20:40:49

2024-06-14 08:11:33

Spring技巧開發

2022-07-20 07:29:52

Java

2013-07-30 14:06:30

Google中國殺手

2022-03-07 05:53:41

線程CPU代碼

2024-06-27 09:17:33

2015-07-17 09:59:18

2015-06-17 11:18:01

WiFi

2021-02-26 09:04:22

數組ArrayListHashMap

2013-09-03 09:09:30

大數據

2015-03-30 10:48:17

大數據大數據處理Hadoop
點贊
收藏

51CTO技術棧公眾號

国产丝袜一区视频在线观看| 天天操天天干天天综合网| 国产在线高清精品| 国产真实乱人偷精品视频| 老牛国内精品亚洲成av人片| 日韩欧美国产一区二区| 宅男av一区二区三区| 色窝窝无码一区二区三区| 麻豆精品视频在线观看视频| 久久国产精品偷| 中文字幕在线看高清电影| 国产精品一区二区三区av| 精品福利在线看| 日本黄色a视频| 天堂视频中文在线| 国产尤物一区二区| 国产不卡av在线| 色在线观看视频| 国产一区不卡| 日韩不卡手机在线v区| 久久精品99国产精品酒店日本| 国产成人精品一区二区在线小狼| 最新欧美电影| 黄色精品一区二区| 成人在线免费观看网址| 国产二区在线播放| 99r精品视频| 97欧洲一区二区精品免费| 波多野结衣视频在线看| 亚洲三级色网| 欧美高清视频一区二区| 岛国片在线免费观看| 卡通动漫国产精品| 日韩亚洲欧美在线| 黄色手机在线视频| 韩日成人影院| 黄色成人av网| 国产精品久久久久久久乖乖| av网站免费在线观看| 国产欧美一区二区三区鸳鸯浴| 国产嫩草一区二区三区在线观看| 国产又爽又黄免费软件| 美女脱光内衣内裤视频久久影院| 午夜美女久久久久爽久久| 欧美三级免费看| 午夜精品一区二区三区国产| 国产香蕉97碰碰久久人人| 波多野结衣有码| 国产精东传媒成人av电影| 91精品国产美女浴室洗澡无遮挡| www.99av.com| 精品视频在线一区二区在线| 日韩欧美中文免费| 国产97在线 | 亚洲| av电影免费在线看| 亚洲国产精品一区二区久久 | 欧美限制电影| 一区二区三区黄色| 精品在线观看一区| 婷婷综合亚洲| 欧美精品一区二区免费| wwwav国产| 欧美视频官网| 91国产精品91| 国产精品男女视频| 视频精品一区二区| 国产精品欧美日韩一区二区| 欧美日韩在线视频播放| 麻豆精品国产传媒mv男同| 国产精品美女免费| 99在线无码精品入口| 丁香婷婷综合网| 国内精品久久国产| 精品视频三区| 亚洲天堂av一区| 国产高清不卡无码视频| 九色porny自拍视频在线观看| 欧美日韩国产综合视频在线观看中文| av免费中文字幕| 成人av色网站| 欧美一区二区视频观看视频| 又大又长粗又爽又黄少妇视频| 51精品国产| 日韩国产精品视频| 日本黄区免费视频观看| 天天做综合网| 69av在线播放| 中文字幕乱码在线观看| 国产高清视频一区| 久久精品人成| 老司机免费在线视频| 亚洲不卡一区二区三区| 北条麻妃视频在线| 高清精品久久| 亚洲人成网站在线播| 久久av红桃一区二区禁漫| 日韩一级不卡| 成人激情av在线| 五月婷婷深深爱| 国产精品久久久久久一区二区三区| 成人在线视频一区二区三区| 婷婷综合六月| 日韩精品中午字幕| 亚洲a∨无码无在线观看| 影音先锋久久| 91丝袜美腿美女视频网站| 神马精品久久| 亚洲精品高清在线| 婷婷六月天在线| 欧美亚洲国产日韩| 成人97在线观看视频| 亚洲欧美综合另类| 国产成人亚洲精品狼色在线| 日本不卡免费新一二三区| 羞羞污视频在线观看| 欧洲精品中文字幕| 国产麻豆剧传媒精品国产av| 欧美顶级大胆免费视频| 日本国产高清不卡| 少妇又色又爽又黄的视频| ●精品国产综合乱码久久久久| 中文字幕日本最新乱码视频| 亚洲天堂中文字幕在线观看| 色黄久久久久久| 日本久久综合网| 99久久99久久久精品齐齐| 国产女人18毛片| 91精品一区| 自拍亚洲一区欧美另类| 草莓视频18免费观看| 99精品欧美一区二区蜜桃免费| 日韩精品手机在线观看| av在线播放一区二区| 综合136福利视频在线| www.久久视频| 久久人人超碰精品| 欧美色图另类小说| 亚洲v天堂v手机在线| 国产做受高潮69| www.久久久久久久久久| 国产精品的网站| 天天爽人人爽夜夜爽| 久久av影视| 日韩美女毛茸茸| 免费观看成年在线视频网站| 狠狠色狠狠色综合日日五| 亚洲国产精品成人综合久久久| 尤物网精品视频| 国产精品一区二区三区四区五区| 亚洲色图美国十次| 日韩精品一区二区三区蜜臀 | 午夜久久影院| 91久久在线视频| 黄色网页网址在线免费| 欧美精品久久99久久在免费线| 我要看一级黄色录像| 韩国成人福利片在线播放| 国产手机视频在线观看| 一本色道69色精品综合久久| 国产做受高潮69| 四虎精品成人免费网站| 91福利资源站| 中文字幕求饶的少妇| 国产一区二区在线观看视频| 免费的一级黄色片| 日韩av资源网| 国产极品精品在线观看| 在线国产91| 日韩欧美一级精品久久| 99精品视频99| 国产视频视频一区| 午夜不卡福利视频| 激情欧美日韩| 日韩欧美亚洲区| 国产精品一站二站| 午夜精品三级视频福利| 免费播放片a高清在线观看| 欧美日韩一区二区在线观看视频| 欧美做爰啪啪xxxⅹ性| 国产99久久久精品| 日本男人操女人| 欧美99在线视频观看| 九色视频成人porny| 伊人久久高清| 欧美成人自拍视频| 日本aaa在线观看| 欧美电影影音先锋| 国产精品久久久久久99| 中文字幕亚洲区| 欲求不满的岳中文字幕| 秋霞av亚洲一区二区三| 久久这里只有精品18| 欧洲激情视频| 国产伦精品一区二区三| 久久91超碰青草在哪里看| 欧美美女18p| 国产福利在线| 日韩黄色av网站| 国产女人18毛片水真多| 欧美日韩在线另类| 欧美爱爱小视频| 欧美激情一区在线| 扒开伸进免费视频| 九九九久久久精品| 爱福利视频一区二区| 中文字幕一区二区三三| 欧美日韩在线观看一区| 一级毛片精品毛片| 国产一区二区丝袜| 欧美成人精品一区二区男人小说| 欧美日本黄视频| 99视频在线观看地址| 日韩精品视频三区| 超碰人人人人人人| 欧美精品成人一区二区三区四区| www.日本精品| 亚洲国产精品一区二区尤物区| 熟女少妇a性色生活片毛片| 久久精品欧美一区二区三区麻豆 | 中文字幕第一页在线播放| 亚洲va在线va天堂| 极品久久久久久| 国产精品欧美久久久久无广告 | 五月婷婷在线播放| 欧美一级二级三级蜜桃| 中文字幕a级片| 日韩欧美在线网址| 国产日产精品一区二区三区| 亚洲在线一区二区三区| 2021亚洲天堂| 一区二区在线免费| 日本中文在线视频| 中文字幕人成不卡一区| 欧美日韩国产黄色| 久久久久成人黄色影片| 亚洲午夜久久久久久久久红桃| 不卡的电视剧免费网站有什么| 性活交片大全免费看| 国产99久久久国产精品免费看| 91性高潮久久久久久久| 国产麻豆欧美日韩一区| 男生和女生一起差差差视频| 精品一区二区在线播放| 在线免费观看av网| 国产精品亚洲午夜一区二区三区 | 国产精品三级在线观看| 色噜噜噜噜噜噜| 国产精品免费久久| av资源在线免费观看| 中文字幕一区二区三区在线播放 | 国产伦理在线观看| 成人免费观看视频| www国产视频| 91丨九色丨黑人外教| av女人的天堂| 国产精品无圣光一区二区| 免费91在线观看| 亚洲日本一区二区三区| 欧美人与禽zozzo禽性配| 亚洲一区二区三区不卡国产欧美 | 污片视频在线免费观看| 久久久久国色av免费观看性色| 波多野结依一区| 91成人国产在线观看| 69堂精品视频在线播放| 91精品啪aⅴ在线观看国产| 天堂精品久久久久| 国产自产在线视频一区| 欧美精品尤物在线观看| 色撸撸在线观看| 精品成人一区| 亚洲男人天堂色| 国产综合久久久久久久久久久久| 亚洲欧洲日韩综合| 91老师片黄在线观看| 日本黄区免费视频观看| 亚洲综合一二三区| 亚洲国产成人精品女人久久| 欧美精品v日韩精品v韩国精品v| 免费a级片在线观看| 亚洲色无码播放| а√天堂8资源在线官网| 97高清免费视频| 日本一区二区三区视频在线| 91pron在线| 蜜桃a∨噜噜一区二区三区| 中文字幕一区二区中文字幕| 亚洲国内精品| 日本黄色的视频| 成人av网站在线| 一级免费黄色录像| 图片区小说区区亚洲影院| 亚洲网站免费观看| 日韩av有码在线| 黄色免费网站在线观看| 81精品国产乱码久久久久久| 全球中文成人在线| 久久综合九色99| 欧美精品首页| 成人性生交免费看| 91免费在线看| 国产这里有精品| 色综合久久88色综合天天6| 国产黄色美女视频| 伊人青青综合网站| 美女视频在线免费| 亚洲专区中文字幕| 欧美日韩中文字幕一区二区三区| 波多野结衣 作品| 捆绑调教美女网站视频一区| 一区二区视频观看| 亚洲一区二区三区激情| 国产露脸91国语对白| 亚洲欧洲日产国产网站| 欧美人与性动交α欧美精品济南到 | 精品国产百合女同互慰| 麻豆电影在线播放| 国产成人涩涩涩视频在线观看 | 婷婷五月色综合| 一本色道久久| 日本性生活一级片| 一区二区在线观看免费| 一级特黄aaaaaa大片| 国产一区二区三区在线播放免费观看 | 国产欧美日韩精品一区| 国产毛片aaa| 亚洲国产精品免费| av电影在线地址| 国产成人精品福利一区二区三区 | 国产精品又粗又长| 国产91在线观看| 精国产品一区二区三区a片| 欧美日韩国产电影| 91啦中文在线| 国产欧美日韩中文字幕在线| 国产一区二区三区站长工具| 人妻精品无码一区二区三区| a在线播放不卡| 日本少妇激情舌吻| 亚洲国产欧美一区二区三区久久| 久草在线视频福利| 国产成人女人毛片视频在线| 黑人一区二区三区四区五区| 可以看的av网址| 亚洲一区av在线| 四虎精品在线| 日本精品一区二区三区在线播放视频| 欧美三级午夜理伦三级小说| 欧美精品一区二区三区三州| av在线播放不卡| 久久亚洲精品国产| 亚洲免费电影在线观看| 国模一区二区| 亚洲综合激情五月| 国产福利一区在线| 精品一区在线视频| 日韩av在线天堂网| 激情都市亚洲| 亚洲午夜精品久久| 国产一区二区导航在线播放| 九九热精品在线观看| 亚洲国产私拍精品国模在线观看| 樱花草涩涩www在线播放| 欧美性bbwbbwbbwhd| 美女视频黄 久久| √天堂中文官网8在线| 亚洲精品一区二区三区蜜桃下载| 色在线中文字幕| 亚洲精品高清国产一线久久| 国产一区二区女| 亚洲国产精一区二区三区性色| 日韩av中文在线| 成人亚洲网站| 国产成人一二三区| 久久久久久电影| 国产偷拍一区二区| 91精品国产电影| 久久中文字幕av| 日韩精品视频一区二区| 在线观看免费一区| a免费在线观看| 免费电影一区| 国产一区二区三区视频在线播放| 国产无遮挡裸体免费视频| 一区二区三区国产视频| 亚洲第一二区| 国产精品亚洲二区在线观看 | 老汉色影院首页| 91在线视频观看| 国产精品国产三级国产aⅴ| 国内伊人久久久久久网站视频| 欧美日韩中文一区二区| 日本五十肥熟交尾| 欧美日韩在线一区二区| 国产粉嫩在线观看| 欧美日韩一级在线| 久久亚洲私人国产精品va媚药| 国产视频在线一区| 欧美综合国产精品久久丁香| 91av精品|