函數(shù)式編程學(xué)習(xí)概要

大綱

image.png

http://naotu.baidu.com/file/62bcbb1a539963f96bf3c5dcc515dbfa

curry函數(shù)

var curry = function curry(f) {
  //獲取curry的參數(shù)看幼,如果第二個參數(shù)不存在批旺,則創(chuàng)建一個空數(shù)組
  var arr = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
  return function f1( ) {
    //獲取當前函數(shù)的參數(shù)
    for (var len = arguments.length, args = Array(len), i = 0; i < len; i++) {
      args[i] = arguments[i];
    }
    //如果參數(shù)沒有傳完,合并arr和args诵姜,遞歸調(diào)用curry
    //f2函數(shù)其實是遞歸調(diào)用的終止條件汽煮,如果已經(jīng)傳完參數(shù),執(zhí)行函數(shù)并終止棚唆,否則遞歸curry
    return function f2(a) {
      return a.length === f.length ? f.apply(null, a) : curry(f, a);
    }([].concat(arr, args));//這種寫法是將arr和args合并后作為f2函數(shù)的參數(shù)
  };
};

compose

<pre class="markdown-highlight" style="margin: 10px 0px 0px; padding: 0px; color: rgb(51, 51, 51); font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial;">簡而言之:compose 可以把類似于 f(g(h(x))) 這種寫法簡化成 compose(f, g, h)(x)</pre>

const compose = (...args) => {  
    return x => {
    let re = args.pop()(x)
     return args.length? compose(...args)(re): re
    }
}

高階函數(shù)

filter map forEach

<pre class="markdown-highlight" style="margin: 10px 0px 0px; padding: 0px; color: rgb(51, 51, 51); font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial;">高階組件</pre>

1暇赤、減少冗余

2、配合修飾器減少代碼

3宵凌、最小化原代碼的改造幅度

npm 庫 react-decoration鞋囊,封裝了很多高階組件,可以直接配合decoration使用

@pureComponent

  validateClass(target, 'pureComponent');

  Object.setPrototypeOf(target.prototype, React.PureComponent.prototype);
  Object.setPrototypeOf(target, React.PureComponent);
}```

@debounce 

```export default function debounce(wait = 300, immediate = false) {
  return (target, key, descriptor) => {
    const userFunc = descriptor.value;

    validateFunction(userFunc, 'debounce');

    let timeout;

    return {
      ...descriptor,
      value: function debouncer(...params) {
        const callNow = immediate && !timeout;
        clearTimeout(timeout);

        timeout = setTimeout(() => {
          timeout = null;
          if (!immediate) {
            userFunc.apply(this, [...params]);
          }
        }, wait);

        if (callNow) {
          userFunc.apply(this, [...params]);
        }
      },
    };
  };
}```

@useShallowEqual

export function useShallowEqual(WrappedComponent) {
if (isFunction(WrappedComponent)) {
return (props, preProps)=>{
console.log(props, preProps);
return WrappedComponent(props);
};
} else {
class ShallowEqualEnhancer extends WrappedComponent {
shouldComponentUpdate(nextProps, nextState) {
let shouldUpdate = false;
if (!super.shouldComponentUpdate || super.shouldComponentUpdate(nextProps, nextState)) {
shouldUpdate = shallowEqual(this.props, nextProps, this.state, nextState);
}
return shouldUpdate;
}
}
ShallowEqualEnhancer.displayName = ShallowEqualEnhanced${WrappedComponent.displayName || WrappedComponent.name || 'Component'};

    return ShallowEqualEnhancer;
}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瞎惫,一起剝皮案震驚了整個濱河市溜腐,隨后出現(xiàn)的幾起案子译株,更是在濱河造成了極大的恐慌,老刑警劉巖挺益,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件歉糜,死亡現(xiàn)場離奇詭異,居然都是意外死亡望众,警方通過查閱死者的電腦和手機匪补,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來烂翰,“玉大人叉袍,你說我怎么就攤上這事」艚矗” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵瞧捌,是天一觀的道長棵里。 經(jīng)常有香客問我,道長姐呐,這世上最難降的妖魔是什么殿怜? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮曙砂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己斗躏,他們只是感情好层释,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著笑陈,像睡著了一般际度。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涵妥,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天乖菱,我揣著相機與錄音,去河邊找鬼蓬网。 笑死窒所,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的帆锋。 我是一名探鬼主播吵取,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼窟坐!你這毒婦竟也來了海渊?” 一聲冷哼從身側(cè)響起绵疲,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎臣疑,沒想到半個月后盔憨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡讯沈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年郁岩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缺狠。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡问慎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出挤茄,到底是詐尸還是另有隱情如叼,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布穷劈,位于F島的核電站笼恰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏歇终。R本人自食惡果不足惜社证,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望评凝。 院中可真熱鬧追葡,春花似錦、人聲如沸奕短。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽翎碑。三九已至崖飘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間杈女,已是汗流浹背朱浴。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留达椰,地道東北人翰蠢。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像啰劲,于是被迫代替她去往敵國和親梁沧。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355