對於樣式中的與大小相關的值,react進行了優化處理,咱們直接使用數字便可,不用寫px單位。css
let style = {
width: 18
}
複製代碼
在咱們不使用庫以前,須要本身動態拼接classname的字符串。源文件也很是簡單,其下載量也說明其使用頻率比較高,參考源碼:連接react
render(){
const {isPressed, isActive} = this.state;
let btnClass = 'btn';
if(isPressed){btnClass +='pressed' };
if(isActive){btnClass +='active' };
}
// 有了以後
import classNames from 'classNames';
render(){
const {isPressed, isActive} = this.state;
let btnClass = {
'btn':true,
'pressed':isPressed,
'isActive':isActive
}
}
複製代碼
基本api以下:webpack
classNames('foo', 'bar'); // => 'foo bar'
classNames('foo', { bar: true }); // => 'foo bar'
classNames({ 'foo-bar': true }); // => 'foo-bar'
classNames({ 'foo-bar': false }); // => ''
classNames({ foo: true }, { bar: true }); // => 'foo bar'
classNames({ foo: true, bar: true }); // => 'foo bar'
// 數組的支持
var arr = ['b', { c: true, d: false }];
classNames('a', arr); // => 'a b c'
複製代碼
css模塊化的方案主要有兩種,分別爲行內樣式以及結合js收集依賴進行管理的css modules。git
而行內樣式具備明顯的幾個痛點是不能解決的,好比僞元素、動畫、媒體查詢等,因此實際開發中,咱們只有一些簡單的樣式處理纔會使用行內樣式,總體的樣式方案並不會使用行內樣式。github
結合js收集css依賴,能夠很方便的進行管理,並且webpack內置的css-loader能夠很好地將樣式以及js拆分出來。web
咱們默認的樣式選擇器是基於全局的,會形成全局樣式污染,爲了覆蓋樣式,咱們就須要使用!important這樣的語句來覆蓋。固然咱們也可使用組件內樣式,但這樣會致使外部沒法重寫樣式,損失了靈活性。api
也是因爲全局命名的規則,因爲各個成員的命名規則不統一,致使樣式名稱混亂。數組
大多數開發者對於依賴管理不夠完全,只是關心全局樣式是否可用,不可用則直接重寫或者覆蓋。模塊化
不一樣的樣式文件中,沒法共享一些變量。學習
在webpack.config.js中設置css?modules&localIdentName=[name]_[local]-[hash-base64-5].加上以後,咱們在引入樣式時就能夠實現樣式的重命名,也能夠方便的引入和控制某部分樣式。好比:
// button.css
.normal{}
.disabled{}
複製代碼
import styles from './button.css';
render(){
return <button className={styles.normal}/> } // 最終生成的css名稱 ,button-normal-abc456 複製代碼
經過這樣的模塊化,解決的問題:
在上面開啓模塊化以後,默認是局部樣式,也就是加了:local的,若是你但願定義的樣式是全局樣式,你須要手動的加:global
你可使用compose來組合也就是複用樣式。固然若是你使用的是其餘樣式預處理器,其自己具備很靈活的各類樣式處理規則,能夠忽略這點,另一半樣式預處理器也沒有這條語法,請不要使用。
// button.css
.base{}
.active{
compose:base;
}
複製代碼
本文主要想提醒給你們的幾個點: