React 優(yōu)秀文章摘要

[React源碼剖析系列 - 生命周期的管理藝術(shù)] (https://www.w3ctech.com/topic/1596)

Paste_Image.png

MobX 相關(guān)

http://www.tuicool.com/articles/UZVZJnY

Redux 對(duì) action / event 作出反應(yīng)两蟀,而 MobX 對(duì) state 變化作出反應(yīng)萨惑。在更新邏輯方面,MobX 是在 store 內(nèi)進(jìn)行相應(yīng)封裝逃沿,假設(shè)一個(gè) UI 操作需要更新多個(gè) store 內(nèi)的值時(shí)透揣,那么我們需要多次觸發(fā)對(duì)應(yīng) action济炎,或者在多個(gè) store 上再添加一個(gè) store 去進(jìn)行控制,這都不如 Redux 來得優(yōu)雅辐真,Redux 只需要觸發(fā)一個(gè) action须尚,多個(gè) reducer 可響應(yīng)相同的 action type崖堤,即可完成更新。

深入mobx原理

首先耐床,讓我們來回顧一下mobx的核心概念:
可觀測(cè)狀態(tài)
狀態(tài)是指任何可以改變并且會(huì)引發(fā)計(jì)算屬性變化的值密幔。mobx可以把大多數(shù)類型的值(基礎(chǔ)類型、數(shù)組撩轰、各種對(duì)象)胯甩,都轉(zhuǎn)化成可觀測(cè)的。而且針對(duì)堪嫂,數(shù)組或?qū)ο蟮鹊慕Y(jié)構(gòu)化的數(shù)據(jù)類型偎箫,這種轉(zhuǎn)化是遞歸的,數(shù)組或?qū)ο蟮乃凶庸?jié)點(diǎn)都會(huì)被轉(zhuǎn)化皆串。
計(jì)算屬性
計(jì)算屬性是一個(gè)函數(shù)淹办。這個(gè)函數(shù)不接收參數(shù),只單純的依賴的其他可觀測(cè)狀態(tài)恶复。依賴的可觀測(cè)狀態(tài)發(fā)生變化怜森,它的運(yùn)行結(jié)果才會(huì)發(fā)生變化。
雖然和定義有一定出入谤牡,但是從輸入輸出保持一致這點(diǎn)來看副硅,計(jì)算屬性應(yīng)該算是一種純函數(shù)。
很多場(chǎng)景都能用到計(jì)算屬性翅萤,比如字符串的連接恐疲,或者生成復(fù)雜結(jié)構(gòu)的對(duì)象。因?yàn)橛?jì)算屬性自身也是可觀測(cè)的断序,所以甚至可以使用它從可觀測(cè)狀態(tài)導(dǎo)出完整的用戶界面流纹。計(jì)算屬性還可以在惰性和活躍兩種狀態(tài)之間切換糜烹。
反應(yīng)
反應(yīng)和計(jì)算屬性有點(diǎn)類似违诗,不同點(diǎn)在于,計(jì)算屬性的函數(shù)是產(chǎn)生一個(gè)新的值疮蹦,而反應(yīng)是產(chǎn)生一個(gè)副作用诸迟。所謂副作用愕乎,就是指一些跟計(jì)算無關(guān)的動(dòng)作阵苇,比如打印日志,網(wǎng)絡(luò)請(qǐng)求感论,更新界面之類的绅项。總之使用反應(yīng)可以把數(shù)據(jù)變化和其他流程關(guān)聯(lián)起來比肄。
動(dòng)作
動(dòng)作是修改狀態(tài)的主要方法快耿。動(dòng)作本身并不對(duì)狀態(tài)更改做響應(yīng)囊陡,而是修改可觀測(cè)狀態(tài)。(如用戶觸發(fā)的事件掀亥、web-socket傳入消息撞反、或直接對(duì)可觀測(cè)狀態(tài)的修改)
這四個(gè)核心概念對(duì)應(yīng)mobx中最常用的4個(gè)api,observable搪花、computed遏片、reaction(autorun)、action撮竿。

React 單元測(cè)試
React+Redux單元測(cè)試一小時(shí)入門

要測(cè)試 ajax 請(qǐng)求吮便,可以用 sinon 的 fake XMLHttpRequest, 不用為了測(cè)試改動(dòng) action 任何代碼:

聊一聊前端自動(dòng)化測(cè)試

Unit testing react component that makes ajax calls using JEST

How to implement testing + code coverage on React with Karma, Babel, and Webpack

Hello Redux 3/3 Unit Test

最近陸續(xù)用 Redux 做了一些 projects,想要把一些心得整理出來倚聚。
目前預(yù)計(jì)整理三篇:
Hello Redux: 關(guān)於 Redux 的一些基本介紹线衫,包括我認(rèn)知的 redux 的一些概念,和我覺得他設(shè)計(jì)得很棒的地方惑折。
Server Rendering: 介紹如何使用 Redux 和 react-router 做 server rendering (ya! 寫好惹授账!)
Unit Test: 在測(cè) Redux 的 code 的時(shí)候我遇到的問題和解決的方法,還有怎麼在測(cè)試的時(shí)候和 webpack loaders 和平共處惨驶。

這篇文章是這個(gè)系列的第三部份白热,Unit Test。

前端單元測(cè)試之Karma環(huán)境搭建

再看看Coverage粗卜,臥槽屋确。。居然不是百分之百了续扔。攻臀。。

原因很簡(jiǎn)單纱昧,webpack會(huì)加入一些代碼刨啸,影響了代碼的Coverage。如果我們引入了一些其它的庫(kù)识脆,比如jquery之類的设联,將源代碼和庫(kù)代碼打包在一起后,覆蓋率會(huì)更難看灼捂。离例。這樣的Coverage就沒有了參考的價(jià)值。

typescriptのunit test(webpack2, karma, jasmine, chai)
karma.conf.js

// Karma configuration
// Generated on Sat Jan 21 2017 10:54:02 GMT+0900 (JST)
const webpackConfig = require('./test.webpack.conf');

module.exports = function(config) {
  config.set({

    // base path that will be used to resolve all patterns (eg. files, exclude)
    basePath: '.',

    // frameworks to use
    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
    frameworks: ['jasmine', 'karma-typescript'],

    // list of files / patterns to load in the browser
    files: [
      'src/**/*.ts',
      'test/unit/index.spec.ts',
    ],

    // list of files to exclude
    exclude: [],

    // preprocess matching files before serving them to the browser
    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
    preprocessors: {
      'test/unit/index.spec.ts': ['webpack', 'sourcemap'],
      'src/**/*.ts': ['webpack', 'karma-typescript'],
    },

    // test results reporter to use
    // possible values: 'dots', 'progress'
    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
    reporters: ['mocha', 'karma-typescript'],

    // web server port
    port: 9876,

    // enable / disable colors in the output (reporters and logs)
    colors: true,

    // level of logging
    // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
    logLevel: config.LOG_INFO,

    // enable / disable watching file and executing tests whenever any file changes
    autoWatch: true,

    // start these browsers
    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
    browsers: ['PhantomJS'],

    // Continuous Integration mode
    // if true, Karma captures browsers, runs the tests and exits
    singleRun: true,

    // Concurrency level
    // how many browser should be started simultaneous
    concurrency: Infinity,

    // phantomjs configuration
    phantomjsLauncher: {
      // Have phantomjs exit if a ResourceError is encountered (useful if karma exits without killing phantom) 
      exitOnResourceError: true
    },

    // webpack configuration
    webpack: webpackConfig,

    // webpack-dev-middleware configuration
    webpackMiddleware: {
      stats: 'errors-only'
    },

    coverageReporter: {
      reporters: [
        { type: 'text-summary' },
      ]
    },
  })
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末悉稠,一起剝皮案震驚了整個(gè)濱河市宫蛆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌的猛,老刑警劉巖耀盗,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辑甜,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡袍冷,警方通過查閱死者的電腦和手機(jī)磷醋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胡诗,“玉大人邓线,你說我怎么就攤上這事』突郑” “怎么了骇陈?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)瑰抵。 經(jīng)常有香客問我你雌,道長(zhǎng),這世上最難降的妖魔是什么二汛? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任婿崭,我火速辦了婚禮,結(jié)果婚禮上肴颊,老公的妹妹穿的比我還像新娘氓栈。我一直安慰自己,他們只是感情好婿着,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布授瘦。 她就那樣靜靜地躺著,像睡著了一般竟宋。 火紅的嫁衣襯著肌膚如雪提完。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天丘侠,我揣著相機(jī)與錄音徒欣,去河邊找鬼。 笑死婉陷,一個(gè)胖子當(dāng)著我的面吹牛帚称,可吹牛的內(nèi)容都是我干的官研。 我是一名探鬼主播秽澳,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼戏羽!你這毒婦竟也來了担神?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤始花,失蹤者是張志新(化名)和其女友劉穎妄讯,沒想到半個(gè)月后孩锡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡亥贸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年躬窜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片炕置。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡荣挨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出朴摊,到底是詐尸還是另有隱情默垄,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布甚纲,位于F島的核電站口锭,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏介杆。R本人自食惡果不足惜鹃操,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望春哨。 院中可真熱鬧组民,春花似錦、人聲如沸悲靴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)癞尚。三九已至耸三,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間浇揩,已是汗流浹背仪壮。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胳徽,地道東北人积锅。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像养盗,于是被迫代替她去往敵國(guó)和親缚陷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容