精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

五月天婷婷色综合| 免费在线a视频| 国产婷婷在线视频| 亚洲午夜久久久久久尤物| 日韩av最新在线| 99热这里只有精品在线播放| h片在线播放| 9i在线看片成人免费| 国产精品美乳一区二区免费 | 国产精品333| h视频在线播放| 国产99久久久国产精品| 日韩av123| 国产精品99精品无码视| 久久性感美女视频| 日韩av网站电影| 伊人色在线视频| 成人性生交大片免费网站 | 久久免费精彩视频| 精品一区二区三区中文字幕老牛| 欧美成人a∨高清免费观看| 老熟妇仑乱视频一区二区 | 亚洲小说欧美激情另类| 亚洲 日韩 国产第一区| 亚洲 国产 欧美 日韩| 精品一区二区成人精品| 日韩美女视频免费看| 国产大片aaa| 欧美.日韩.国产.一区.二区| 最近免费中文字幕视频2019| 四虎永久免费影院| av一级亚洲| 91精品国产综合久久精品性色| 久草青青在线观看| 国产精品一二三产区| 亚洲欧美国产高清| 亚洲国产精品久久久久久女王| 蜜臀av在线观看| 国产一二三精品| 成人两性免费视频| 中文字幕久久熟女蜜桃| 毛片一区二区| 欧美亚洲视频在线观看| 久久精品国产亚洲AV无码男同| 久久精品影视| 日韩最新中文字幕电影免费看| 精品人妻一区二区三区视频| 欧美韩一区二区| 亚洲大胆人体av| 无码人妻一区二区三区一| 成人精品视频在线观看| 欧美精品一级二级| 日韩一级免费片| 国产精品伦一区二区| 欧美视频一区二区三区在线观看| 国内自拍视频一区| 日韩免费小视频| 91福利资源站| 亚洲国产高清av| 美女视频一区| 欧美精品第1页| 五月天婷婷在线观看视频| 日韩成人免费av| 欧美电影一区二区| 337p日本欧洲亚洲大胆张筱雨 | 欧美一区永久视频免费观看| 6080国产精品| 亚洲专区**| 亚洲福利在线播放| 久久无码人妻精品一区二区三区| 香蕉人人精品| 国产亚洲精品久久久久久777| 国产高潮呻吟久久| 欧美r级电影| 欧美xxxx18国产| 国产网址在线观看| 欧美一级专区| 国产精品视频999| 国产手机精品视频| 成年人国产精品| 日本一区二区三区精品视频| 日韩黄色影院| 亚洲在线成人精品| 免费在线激情视频| 欧美videos粗暴| 亚洲黄色片网站| 国产无遮挡在线观看| 综合久久十次| 欧美在线视频网| 亚洲特级黄色片| 成人夜色视频网站在线观看| 欧美动漫一区二区| 麻豆影院在线观看| 午夜伦理一区二区| 九色porny自拍| 97久久亚洲| 最好看的2019年中文视频| 国产主播在线播放| 男人的j进女人的j一区| 超碰97人人人人人蜜桃| 成人性爱视频在线观看| 亚洲精品国产成人久久av盗摄 | 九九热国产视频| 蜜桃精品视频在线| 国产精品一区二区免费看| 91在线视频| 偷拍与自拍一区| 97超碰人人看| 欧美另类69xxxxx| 午夜精品在线观看| 国产极品久久久| 中文字幕乱码亚洲精品一区| 免费无码毛片一区二三区| 亚洲国产综合在线观看| 国产午夜精品美女视频明星a级| 国产精品99无码一区二区| 精品影视av免费| 欧美在线激情| 成人av观看| 亚洲成人免费在线视频| 动漫性做爰视频| 蜜臀av一区二区三区| 久久99久久99精品蜜柚传媒| 欧洲黄色一区| 欧美一区二区三区视频免费| 长河落日免费高清观看| 久久精品亚洲一区二区| 国产三区二区一区久久| 色图在线观看| 欧美一区二区三区视频免费| 免费黄色国产视频| 日韩1区2区日韩1区2区| 日本成人黄色| 欧美大胆性生话| 日韩av网站导航| 一级片免费网址| www.欧美日韩| 国产无限制自拍| 综合欧美亚洲| 久久久久久久爱| 黑人操亚洲女人| 一区二区三区精品视频| 欧美污在线观看| 欧美精品自拍| 国产精品久久久久久久小唯西川 | 精品久久久久久电影| 乱码一区二区三区| 国产一区久久| 成人18视频| yellow在线观看网址| 精品奇米国产一区二区三区| 久久久全国免费视频| 成人免费视频免费观看| 精品少妇人欧美激情在线观看| 91蝌蚪精品视频| 国内精品小视频在线观看| 人妻少妇精品无码专区| 偷拍一区二区三区| 欧美特级黄色录像| 美国一区二区三区在线播放| 一区二区三区国产福利| 亚洲午夜国产成人| 欧美日本亚洲视频| 手机av免费在线观看| 欧美日韩在线另类| jizz中文字幕| 精品一区二区三区的国产在线播放| 最新视频 - x88av| 久本草在线中文字幕亚洲| 69视频在线免费观看| 国产永久av在线| 欧美日韩精品一区二区| 日韩成人短视频| 成人午夜在线免费| 欧美日韩在线免费播放| 91成人看片| 久久久精品动漫| 国产精品伦一区二区| 欧美国产高跟鞋裸体秀xxxhd| 日韩二区三区| 欧美日韩www| 久久久久香蕉视频| 久久久精品综合| 国产欧美精品一二三| 日韩视频一区| 亚洲精品久久区二区三区蜜桃臀| 欧美成人精品一级| 欧美在线视频免费播放| 国产三级在线播放| 日韩成人av网址| 亚洲一区中文字幕在线| 亚洲va欧美va国产va天堂影院| 无码人妻aⅴ一区二区三区69岛| 国产一区二区毛片| 精品久久久久av| 午夜天堂精品久久久久| 欧美一区二区在线| 日韩黄色av| 国产精品视频一区国模私拍| 好久没做在线观看| 国产午夜精品一区理论片飘花| 超碰在线人人干| 欧美性感一区二区三区| 国产真实的和子乱拍在线观看| 国产欧美视频一区二区| 久久久久久婷婷| 久久99精品国产.久久久久| 亚洲自偷自拍熟女另类| 91精品国产调教在线观看| 麻豆av一区二区三区久久| 秋霞午夜一区二区三区视频| 国产精品视频网| 日韩免费福利视频| 欧美国产欧美亚洲国产日韩mv天天看完整 | 欧美亚洲精品日韩| 综合伊人久久| 91久久久久久久久| 狂野欧美性猛交xxxx| 日韩暖暖在线视频| 久久久男人天堂| 欧美激情手机在线视频 | 亚洲第九十九页| 欧美日韩亚洲综合一区| 国产女主播喷水视频在线观看| 亚洲一卡二卡三卡四卡五卡| 三级黄色在线观看| 中文字幕电影一区| 特级西西www444人体聚色| 92国产精品观看| 免费日本黄色网址| 国产69精品久久777的优势| 久久久精品视频国产| 麻豆精品一二三| 鲁一鲁一鲁一鲁一av| 日本不卡视频在线观看| 毛片av免费在线观看| 久久久xxx| av免费中文字幕| 亚洲免费综合| 成年人免费在线播放| 亚洲永久免费| 黄色国产精品视频| 丝袜亚洲另类欧美综合| 成年人视频在线免费| 久久精品成人| 日本三区在线观看| 日韩高清中文字幕一区| 免费裸体美女网站| 奇米888四色在线精品| 久久久久国产一区| 美女脱光内衣内裤视频久久网站| 日本三级黄色网址| 精品一区二区三区免费播放| 婷婷激情小说网| 国产成人av电影在线播放| 国产人妖在线观看| 成人av综合一区| 爱爱的免费视频| 国产亚洲精品中文字幕| 长河落日免费高清观看| 亚洲视频一区二区在线| 免费看一级一片| 精品福利樱桃av导航| 久久精品无码av| 欧美这里有精品| 国产高中女学生第一次| 精品久久人人做人人爽| 亚洲av成人无码久久精品老人 | 欧美精品黑人性xxxx| 国产福利第一页| 日韩av在线天堂网| 国产三级在线看| 欧美成人免费一级人片100| sm捆绑调教国产免费网站在线观看| 国产91成人在在线播放| 一区二区视频免费完整版观看| 91精品久久久久久久久久久久久| 亚洲精品18| 日本精品一区| 中文字幕一区二区三区乱码图片 | 日韩精品在线视频| 亚洲欧美视频一区二区| 欧美激情性做爰免费视频| 中文字幕成在线观看| 国产精品一区二区在线| 91大神精品| 视频一区二区三| 欧美视频不卡| 中文久久久久久| 成人精品在线视频观看| 亚洲精品视频久久久| 亚洲欧美一区二区三区久本道91| 日本一级一片免费视频| 91.com在线观看| 黄色小视频在线观看| 欧美另类第一页| 3d欧美精品动漫xxxx无尽| 亚洲综合自拍一区| 精品国产一区二区三区小蝌蚪| 亚洲激情免费视频| 日本一不卡视频| 婷婷五月精品中文字幕| 国产精品乱码妇女bbbb| 成人精品免费在线观看| 在线播放欧美女士性生活| 日本一级在线观看| 欧美日韩xxx| 日韩国产91| 鲁丝一区二区三区免费| 国内成人在线| 午夜免费一级片| 国产精品美女久久久久久久久| 在线免费观看毛片| 91精品一区二区三区在线观看| 黄色电影免费在线看| 高清欧美性猛交xxxx| 久久综合给合| 正在播放亚洲| 老司机免费视频一区二区三区| 精品人妻一区二区三区香蕉 | 黄色片中文字幕| 亚洲级视频在线观看免费1级| 成人短视频在线| 成人亲热视频网站| 色琪琪久久se色| av无码精品一区二区三区| 91亚洲精品久久久蜜桃| 国产精品suv一区二区| 日韩精品专区在线| 麻豆影院在线观看| 国产主播喷水一区二区| 北条麻妃国产九九九精品小说 | 一区二区三区日韩视频| 奇米777欧美一区二区| 免费看裸体网站| 欧美性受xxxx| 91av资源在线| 国产精品网红福利| 日韩www.| 久久黄色片网站| 一区在线播放视频| 国产一区二区三区黄片| 久久精品国产一区| www.久久草.com| 51xx午夜影福利| 国产传媒日韩欧美成人| 久久久久久久久久久97| 精品毛片乱码1区2区3区| 日韩激情美女| 极品日韩久久| 久久久久久久波多野高潮日日| 91视频在线网站| 欧美日韩国产免费一区二区| 巨大荫蒂视频欧美另类大| 亚洲一区二区三区乱码aⅴ| 午夜欧美精品| av直播在线观看| 欧美中文字幕亚洲一区二区va在线| 91在线看片| 97超级碰碰| 亚洲永久网站| 国产精品酒店视频| 欧美一区二区三区免费观看视频| 四虎亚洲精品| 久久久久成人精品免费播放动漫| 天堂成人国产精品一区| 欧美性生给视频| 日韩女优制服丝袜电影| 色是在线视频| 亚洲国产精品综合| 国产河南妇女毛片精品久久久| 日韩视频免费观看高清| 亚洲性无码av在线| 国产高清日韩| 91好吊色国产欧美日韩在线| 国产日韩av一区二区| 国产巨乳在线观看| 97国产精品免费视频| 久久视频在线| 99re久久精品国产| 在线观看91精品国产麻豆| ****av在线网毛片| 亚洲精品国产精品国自产| 风流少妇一区二区| 国产精华7777777| 欧美多人爱爱视频网站| 精品毛片免费观看| 国产chinesehd精品露脸| 色悠悠久久综合| v天堂福利视频在线观看| 欧美一级片免费观看| 国产一区二区三区在线观看免费 | 视频一区在线播放| 青青草精品在线视频| 亚洲色图50p| heyzo欧美激情| 奇米视频7777| 日韩欧美在线观看视频| 尤物yw193can在线观看| 日韩电影免费观看在|