notes

antd

  • Modal對話框中,默認設置寬度最大為650px,且增加了!important最高權重。

    Modal提供了 wrapClassName 屬性,可以命名對話框外層容器的類名。通過在css文件中如下修改層疊閥蓋默認最大寬度650px。

    .wrapClassName .ant-modal {
        width: 1000px;
    }
    
  • 全局提示 message.config 配置

    message.config({
        top: 100, //@param number || string 距離頂部位置,單位px
        duraion: 2, //顯示持續時間,單位秒
        maxCount: 1 //最多顯示條數,超過就立即隱藏多出的最早的一條
    })
    

copy-to-clipboard

//yarn add copy-to-clipboard
copy(variation)

vmax

  • 相對于可視窗口的寬度或高度中較大的那個。類比于 vh, vw

    p {
        font-size: 8vmax;
    }
    

font & Font Format

  • woff2 不適用于IE、IE mobile、UC for Android

  • woff 最新客戶端全兼容

  • svg 適用于Safari、iOS Safari

  • eot 僅僅適用于IE

  • ttf / otf 不適用于IE

    /*引用外部字體文件,寫入css命名,定義模板輸出*/
    @font-face {
        font-family: 'Font name string'; /*定義字體名稱*/
        src: url('fonts/hanshand-webfont.eot');
        src: url('fonts/hanshand-webfont.eot') format('embedded-opentype'),
             url('fonts/hanshand-webfont.woff') format('woff'),
             url('fonts/hanshand-webfont.ttf') format('truetype'),
             url('fonts/hanshand-webfont.svg') format('svg');
        font-weight: normal;
        font-style: normal;
    }
    

overflow

  • css 中 overflow 屬性。在多層嵌套的布局環境下,內部元素(常見的是modal彈出框之類的元素),會超出屏幕邊界,原本不顯示的滾動條會被迫出現,為了撐開頁面顯示超出邊界的元素。
  • 此時,overflow 屬性需要配合 position:relative; 一起使用。

react router <params / query / state>

  • params 傳參方式會直接體現在地址欄中,只允許傳遞字符串。

  • query方式和state方式一致,可傳遞對象數據,傳遞數據不會體現在地址欄中。

    let queryData = {
        pathname: '/tonextpage',
        query: <...>
    }
    let stateData = {
        pathname: '/tonextpage',
        state: <...>
    }
    
    <Link to={queryData}></link>
    <Link to={stateData}></link>
    

exif-js

  • 讀取圖像元數據

  • yarn add exif-js

    import Exif from 'exif-js'
    
    Exif.getData(fileObj, function(){
        const allTags = Exif.getAllTags(this)
    }
    

antd-upload-customRequest

  • customRequest 方法不支持 async 函數

    復現報錯:

    Uncaught TypeError: reqs[uid].abort is not a function
    

react function transfer between father and son component

  • function transfer

    // in father component
    getName() {
        ...
    }
    ...
    <Son getName={this.getName.bind(this)}/>
    
    //to run geName function in son component
    this.props.getName()
    

css z-index invalid

  • 父標簽設置了position:relative
  • 當前標簽未設置position:absolute
  • 當前標簽設置了float屬性

css z-index valid

  • 當前標簽設置position:absolute / relative

React - setState(prevState => {})

//...
constructor(props) {
 super(props)
 this.state = {
     num: 1,
 }
}
//...
this.setState(
  prevState => ({
      num: prevState.num + 1, //通過調用 prevState 形參,獲取上一個狀態組件中的 state 值
  })
)

git stash

//暫存掛起到工作區,回到當前分支最近一次提交狀態
git stash

//顯示暫存列表
git stash list

//回到掛起前狀態,應用到所在分支,并同時刪除暫存列表
//回歸到掛起前狀態與所在分支無關
git stash pop

//刪除暫存列表中某一項
git stash drop stash@{0}

CSS calc()

.example{
  //尺寸計算,支持 加減乘除
  width: calc(100% - 20px);
  height: calc(100% = 1em);
}

React component ref attribute

// 調用 dom 方法1
...
let targetDom = this.refs.target
...
<Children ref="target"/>

// 調用 dom 方法2
...
let targetDom = this.target
...
<Children ref={c => this.target = c}

Use functions of children component in parent component

// Parent.js
...
getChildComponent(ref) {
  this.child = ref // 獲取子組件class,這里的ref即是子組件
}
...
this.child.getSomething()// 調用子組件函數方法
...
<Child foo={this.foo.bind(this)}/>


// Child.js
...
componentDidMount() {
  this.props.getChildComponent(this) // 這里的 this 指向子組件
}

getSomething() {
  console.log('Got it')
}
...

reduce()

reduce(callback(accumulator, currentValue, currentIndex, array))

let arr = [0, 1, 2, 3, 4]
arr.reduce(
  (accumulator, currentValue, currentIndex, array) => accumulator + currentValue
)

回調狀態變更歷程

callback accumulator currentValue currentIndex array return value
first call 0 1 1 [0, 1, 2, 3, 4] 1
second call 1 2 2 [0, 1, 2, 3, 4] 3
third call 3 3 3 [0, 1, 2, 3, 4] 6
fourth call 6 4 4 [0, 1, 2, 3, 4] 10

reduce(callback(accumulator, currentValue, currentIndex, array), initialValue)

let arr = [0, 1, 2, 3, 4]
arr.reduce(
  (accumulator, currentValue, currentIndex, array) => accumulator + currentValue,
  10
)

回調狀態變更歷程

callback accumulator currentValue currentIndex array return value
first call 10 0 0 [0, 1, 2, 3, 4] 10
second call 10 1 1 [0, 1, 2, 3, 4] 11
third call 11 2 2 [0, 1, 2, 3, 4] 13
fourth call 13 3 3 [0, 1, 2, 3, 4] 16
fifth call 16 4 4 [0, 1, 2, 3, 4] 20

context

// define
const {Provider, Consumer} = React.createContext(defaultValue)
// or
const contentContext = React.createContext(defaultValue)


// provider
<Provider value={/* some value */}>
// or
<contentContext.Provider value={/* some value */}>


// consumer
<Consumer>
  {value => /* render something based on the context value */}
</Consumer>
// or
<contentContext.Consumer>
  {value => /* render something based on the context value */}
</contentContext.Consumer>

grid - CSS

/* 父元素申明 grid 布局*/
.container {
  display: grid;
  grid-template-columns: 100px 100px 100px 100px; /*均勻排列4列,每列100px*/
  grid-template-rows: 100px 100px 100px 100px; /*均勻排列4行,每行100px*/
  grid-gap: 2px; /*定義行列固定間距 2px*/
  /* 等價拆分寫法
  grid-row-gap: 2px;
  grid-column-gap: 2px;
  */
}

.item1 {
  grid-row-start: 2; /*柵格單元,從柵格行的第2柵格線開始;單獨出現,補全單個柵格單元*/
  grid-row-end: 3; /*柵格單元,到柵格行的第3柵格線結束;單獨出現,補全單個柵格單元*/
  grid-column-start: 2; /*柵格單元,從柵格列的第2柵格線開始;單獨出現,補全單個柵格單元*/
  grid-column-end: 3; /*柵格單元,到柵格列的第3柵格線結束;單獨出現,補全單個柵格單元*/
}

.item2 {
  grid-row: 4 / 6; /*柵格單元,從柵格行的第4柵格線開始,到柵格行的第6柵格線結束*/
  grid-column: 4 / 6; /*柵格單元,從柵格列的第4柵格線開始,到柵格列的第6柵格線結束*/
}

.item3 {
  grid-row: span 2; /*柵格單元,自身跨越兩行*/
  grid-column: span 2; /*柵格單元,自身跨越兩列*/
}

.item4 {
  grid-area: -3 / 4 / -1 / 3; /*固定順序,row-start / column-start / row-end / column-end ;對應的行或列的起始位置可對換*/
}
http 1.1 & http 2.0

http 1.1

  • 瀏覽器限制同域名下的并發請求數量,不同瀏覽器的最大并發請求數量各不相同,但都不超過10。當超過最大并發請求數量后,后續的請求會進入隊列先進先出,發送請求,此時便發生了隊頭阻塞的情況。
  • 采用文本傳輸方式,傳輸數據不分割。
  • 對請求頭不做壓縮處理,附帶cookie時,每次請求都會重復附帶信息

http 2.0

  • 多路復用,TCP鏈接中可以傳輸多條數據流,可以發送多個請求,
  • 采用二進制編碼,分割傳輸數據,請求頭與請求體分割
  • 對請求頭進行壓縮
png8 & png24

png8 和 png24 在顏色上面是沒有差異的,差別體現在對透明性的展現上,其本質是存儲方式上的不同

png8 是1位的透明通道,只能顯示全透明和不透明,在圖形邊緣有明顯的鋸齒;png24 是8位的透明通道,可以顯示全透明、半透明、不透明,圖形邊緣沒有明顯鋸齒

mobx & redux

redux 單一store,函數式的方法對狀態進行變更,每次都需要dispatch方法來改變對應狀態值,減少一切冗余,適用于小而簡單的應用,適用于快速開發

mobx 多個store,面向對象式的方式對狀態進行變更,狀態值的引用指向始終不會發生變化,允許冗余數據相關聯始終可控可追溯,適用于大而復雜的應用,適用于長期維護的開發

number of connections per same origin server

瀏覽器同域最大并發請求。瀏覽器對同于域名下的資源請求,即同一域名下的TCP連接數,并發數量有不同的限制。chrome 8+ 是 6,firefox 3+ 是 6, safari 4+ 是 4。因此可以采用跨域請求來分散同一時間對同域的請求,將資源文件(圖片,css等)文件放到不同的域名下,或者分發到cdn是比較有效的措施。

單個TCP連接可以發送多個http請求。在http/1.1下,需要按順序發送響應,以免亂序,丟包重新傳輸;在http/2.0下,支持多路復用,且對http請求做了拆封對應和算法加密,可以亂序傳輸響應,不影響解析。

The hole variable types check
// type check
Object.prototype.toString.call(variable)
/**
 * variable = []  >>> '[object Array]'
 * variable = null  >>> '[object Null]'
 * variable = {}  >>> '[object Object]'
 * variable = undefined  >>> '[object Undefined]'
 * variable = ''  >>> '[object String]'
 * variable = 1  >>> '[object Number]'
 * variable = false  >>> '[object Boolean]'
*/
this in object
let name = "in window"
let obj = {
  name: "in obj",
  getName: function() {
    console.log(this.name)
    return function() {
      // js對象中匿名函數返回值,指向window
      return this.name
    }
  },
  getNameFunc: function() {
    console.log(this.name)
    return () => this.name
  }
}

obj.getName()()
/**
 * in obj
 * "in window"
*/

obj.getNameFunc()()
/**
 * in obj
 * "in obj"
*/
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,698評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,202評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 177,742評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,580評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,297評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,688評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,693評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,875評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,438評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,183評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,384評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,931評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,612評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,022評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,297評論 1 292
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,093評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,330評論 2 377

推薦閱讀更多精彩內容