一种简化 Redux 的思路

动机

我们热爱 React 和 Redux。但是,Redux 中有太多的样板文件,需要很多的重复劳动,这一点令人沮丧;更别提在实际的 React 应用中,还要集成 react-router 的路由功能了。

一个典型的 React/Redux 应用看起来像下面这样:

actions.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
export const ADD_TODO = 'todos/add'
export const COMPLETE_TODO = 'todos/complete'
export function addTodo(text) {
return {
type: ADD_TODO,
text
}
}
export function completeTodo(id) {
return {
type: COMPLETE_TODO,
id
}
}

Read more

Debounce 和 Throttle 的原理及实现

在处理诸如 resizescrollmousemovekeydown/keyup/keypress 等事件的时候,通常我们不希望这些事件太过频繁地触发,尤其是监听程序中涉及到大量的计算或者有非常耗费资源的操作。

有多频繁呢?以 mousemove 为例,根据 DOM Level 3 的规定,「如果鼠标连续移动,那么浏览器就应该触发多个连续的 mousemove 事件」,这意味着浏览器会在其内部计时器允许的情况下,根据用户移动鼠标的速度来触发 mousemove 事件。(当然了,如果移动鼠标的速度足够快,比如“刷”一下扫过去,浏览器是不会触发这个事件的)。resizescrollkey* 等事件与此类似。

可以参看这个 Demo 体会下。

Read more

Decorators in ES7

ES6 已经来了,ES7 还会远么?

ES6 标准已于上个月(2015年6月17日)正式发布,众多新特性成为标准固然另人激动,然而更值得憧憬的还是未来。所以,让我们来看看 ES7(更正式的说法是 ES2016)有哪些激动人心的变化。最为人津津乐道的可能就是 async/await 了,不过我个人非常喜欢 Yehuda Katz 提出的 decorator 模式,本文尝试对此做一个介绍。

decorator 是什么

ES7 的 decorator 概念是从 Python 借来的,在 Python 里,decorator 实际上是一个 wrapper,它作用于一个目标函数,对这个目标函数做一些额外的操作,然后返回一个新的函数:

Read more

《论自由》读书笔记

注:我读的是 顾肃译本,对我来说,这个译本总体上读起来很通顺,除了极少数长句有些别扭之外,其他都很容易理解。

密尔的这本《论自由》,其实早就应该读的。大学期间在图书馆看到过一本老旧的严复译《群己权界论》,严本所受评价甚高,奈何其文颇为晦涩拗口(其实是我古文水平太低),翻了两页就没勇气继续下去了,后面就一直束之高阁。直到最近,才趁着空闲时间,读完了这本只有不到两百页的「小书」。

在本书的开篇,作者就声明,本书要讨论的「自由」是「公民自由或社会自由,即社会可以合法地施加于个人的权力之性质和界限」(由此可见严复译本书名之准确贴切)。这个界限是什么呢?作者说,是自我保护,即「人类可以个别地或集体地对任何成员的行动自由进行干涉,其唯一的正当理由是旨在自我保护」。在其他任何情况下,只要一个人的行动不会明显而立即地对他人造成伤害,则社会没有权力阻止他的行动。这说的是社会权力之界限。由此我们也可以推导出个人自由的界限,这个界限就是,个人自由不能妨害他人同样的自由

Read more

Todomvc with ES6 and jspm

jspm 是一个包管理器,使用 SystemJS 这个模块加载器进行模块的管理。SystemJS 是一个所谓 universal module loader,基于 ES6 module loader,除了能加载 ES6 模块,还支持 CommonJS,AMD 及 globals 语法。

1. How jspm load modules

jspm 通过 registry 加载模块,它其实没有自己的仓库,目前只能加载 npmgithub 上的模块,当然也可以自己通过它的 registry 机制「注册」一些模块之后使用。

Read more