美文网首页
React 优秀文章摘要

React 优秀文章摘要

作者: void_main | 来源:发表于2017-04-06 16:28 被阅读98次

[React源码剖析系列 - 生命周期的管理艺术] (https://www.w3ctech.com/topic/1596)

Paste_Image.png

MobX 相关

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

Redux 对 action / event 作出反应,而 MobX 对 state 变化作出反应。在更新逻辑方面,MobX 是在 store 内进行相应封装,假设一个 UI 操作需要更新多个 store 内的值时,那么我们需要多次触发对应 action,或者在多个 store 上再添加一个 store 去进行控制,这都不如 Redux 来得优雅,Redux 只需要触发一个 action,多个 reducer 可响应相同的 action type,即可完成更新。

深入mobx原理

首先,让我们来回顾一下mobx的核心概念:
可观测状态
状态是指任何可以改变并且会引发计算属性变化的值。mobx可以把大多数类型的值(基础类型、数组、各种对象),都转化成可观测的。而且针对,数组或对象等的结构化的数据类型,这种转化是递归的,数组或对象的所有子节点都会被转化。
计算属性
计算属性是一个函数。这个函数不接收参数,只单纯的依赖的其他可观测状态。依赖的可观测状态发生变化,它的运行结果才会发生变化。
虽然和定义有一定出入,但是从输入输出保持一致这点来看,计算属性应该算是一种纯函数。
很多场景都能用到计算属性,比如字符串的连接,或者生成复杂结构的对象。因为计算属性自身也是可观测的,所以甚至可以使用它从可观测状态导出完整的用户界面。计算属性还可以在惰性和活跃两种状态之间切换。
反应
反应和计算属性有点类似,不同点在于,计算属性的函数是产生一个新的值,而反应是产生一个副作用。所谓副作用,就是指一些跟计算无关的动作,比如打印日志,网络请求,更新界面之类的。总之使用反应可以把数据变化和其他流程关联起来。
动作
动作是修改状态的主要方法。动作本身并不对状态更改做响应,而是修改可观测状态。(如用户触发的事件、web-socket传入消息、或直接对可观测状态的修改)
这四个核心概念对应mobx中最常用的4个api,observable、computed、reaction(autorun)、action。

React 单元测试
React+Redux单元测试一小时入门

要测试 ajax 请求,可以用 sinon 的 fake XMLHttpRequest, 不用为了测试改动 action 任何代码:

聊一聊前端自动化测试

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

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

這篇文章是這個系列的第三部份,Unit Test。

前端单元测试之Karma环境搭建

再看看Coverage,卧槽。。居然不是百分之百了。。。

原因很简单,webpack会加入一些代码,影响了代码的Coverage。如果我们引入了一些其它的库,比如jquery之类的,将源代码和库代码打包在一起后,覆盖率会更难看。。这样的Coverage就没有了参考的价值。

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' },
      ]
    },
  })
}

相关文章

  • React 优秀文章摘要

    [React源码剖析系列 - 生命周期的管理艺术] (https://www.w3ctech.com/topic/...

  • React优秀文章

    好文章: hook的使用(hook与class的区别):https://www.jianshu.com/p/aaf...

  • react native 资料集

    awesome-react-native老外搜集的优秀的React Native文章,库(资料很全)http://...

  • react摘要

    基础 jsx(原理?) 实现一个简单的createElement及render方法 组件声明方式 props和st...

  • 21个React开发神器

    摘要: React开发神器。 原文:22 Miraculous Tools for React Developer...

  • React教程:4 个 useState Hook 示例

    摘要: React示例教程。 原文:快速了解 React Hooks 原理 译者:前端小智 到 React 16....

  • Redux 最佳实践

    摘要 Redux 是 其他 flux 框架 推荐使用的 React 框架。当我开始写这篇文章时,它还是 1.0.0...

  • 项目概要 -项目大体介绍

    react+react-router+antd (单车后台项目) 如下图片是预览摘要里内容。

  • NT 技术周刊-1014

    React Native通讯原理[原创] 摘要 � 深入React Native源码,分析JS与Native如何实...

  • NT 技术周刊-1021

    React-Native 渲染实现分析[原创] 摘要 � React Native与传统的HybirdApp最大区...

网友评论

      本文标题:React 优秀文章摘要

      本文链接:https://www.haomeiwen.com/subject/qieqattx.html