我们迎面挑战这种趋势:JS开发者总是得过且过地学习“将就够用”的东西,而从来不强迫他们自己去学习这门语言究竟是为何与如何工作的。所以,当我们遇到困难的时候,我们首先想到的是逃跑或者跳过。
来自 https://github.com/getify/You-Dont-Know-JS/blob/1ed-zh-CN/preface.md
最近接触了koa的洋葱模型,看了redux-saga的发展,突然想到之前在些webpack图片压缩插件的时候,这两这都是为了社区更好的发展和框架的扩展,都以不同的方式可以对框架进行干预,大概就是两种:###### 1.以生命周期为例
webpack:plugins 插件
就是webpack 抛出了自己的context 当我们写插件的时候 可以访问到webpack的每一个状态,并且可以读取当前状态的各种信息,当webpack执行的时候每经过一个生命周期就遍历插件 ,并执行插件的方法,这样达到扩展的目的
这又不同于gulp,gulp是一个什么都没有,仅仅是提供了给你写task的能力,一些基础的东西全部都要自己去写,webpack就不一样了,很多东西不用自己造轮子,插件也好,loader也好,都已经有很多现成,直接进行配置就好了,不用关心内部的执行
vue的方式是提供一个use方法:
Vue.js 的插件应该有一个公开方法 install install方法会接受Vue,当我们调用use的时候就可以访问到vue ,现在用到的就是 ,可以注册一些全局的方法,一些全局的混合等
2.以洋葱模型为基础
- koa算是一种
- redux的applymiddleware也是一种
例如redux-saga,为了redux更完美的实现异步,去修改redux抛出的dispatch,当调用dispatch的时候其实并不是直接调用的redux的dispacth,他会把redux的dispacth保存起来通过next去传递,并去执行redux-saga的dispacth,虽然也是一个纯的对象,但是saga内部维护了一个sagas异步的任务列表和自己的自执行函数,在dispacth发出action的时候,订阅器收到当前的action会去执行异步的任务,自执行函数去执行遍历起生成函数,当执行到gen.next()返回值为done为true的时候,根据保存的dispatch再去执行reducer,这样就把异步的处理方式独立了出来形成这样一个数据流: redux -> action->sagas dispatch -> 完成后 redux-dispacth-redux reducer去更新数据
网友评论