用函数式的方式思考——递归

在我们初学函数的时候,函数通常被描述为能独立完成一个功能的单元,并且通常以命令式的方式出现: function fact(n: number): number { let result = 1; for (let i = 0; i <= n; i += 1) { result *= i; } return result; } 代码是在操作数据,…

Read More

getDerivedStateFromProps

React 16.3 开始,React 废弃了一些 API(componentWillMount, componentWillReceiveProps, and componentWillUpdate),同时推出了一些新的 API 代替,包括getDerivedStateFromProps。根据应用场景的不同,getDerivedStateFromProps的使用方式也不同。 半受控组件 虽然 React 官方不推荐半受控组件,当然从 API 设计和维护的角度考虑也是不推荐的。但是实际需求往往会出现用户不关心某个业务逻辑的内部实现,…

Read More

浅谈前端响应式设计(二)

上一篇博客提到了几种响应式的方案,以及它们的缺点。本文将介绍Observable以及它的一个实现,以及它在处理响应式时相对于上篇博客中的方案的巨大优势(推荐两篇博客对比阅读)。 Observable是一个集合了观察者模式、迭代器模式和函数式的库,提供了基于事件流的强大的异步处理能力,并且已在Stage 1草案中。本文介绍的Rxjs是Observable的一个实现,它是ReactiveX众多语言中的JavaScript版本。 在JavaScript中,我们可以使用T | null去处理一个单值,使用Iterator去处理多个值得情况,使用Promise处理异步的单个值,而Observable则填补了缺失的“异步多个值”。   单个值 多个值 同步 T 、 null…

Read More

浅谈前端响应式设计(一)

现实世界有很多是以响应式的方式运作的,例如我们会在收到他人的提问,然后做出响应,给出相应的回答。在开发过程中我也应用了大量的响应式设计,积累了一些经验,希望能抛砖引玉。 响应式编程(Reactive Programming)和普通的编程思路的主要区别在于,响应式以推(push)的方式运作,而非响应式的编程思路以拉(pull)的方式运作。例如,事件就是一个很常见的响应式编程,我们通常会这么做: button.on('click', () => { // ... }) 而非响应式方式下,…

Read More

我为什么从Redux迁移到了Mobx

Redux是一个数据管理层,被广泛用于管理复杂应用的数据。但是实际使用中,Redux的表现差强人意,可以说是不好用。而同时,社区也出现了一些数据管理的方案,Mobx就是其中之一。 Redux的问题 Predictable state container for JavaScript apps 这是Redux给自己的定位,但是这其中存在很多问题。 首先,Redux做了什么?看Redux的源码,createStore只有一个函数,返回4个闭包。dispatch只做了一件事,调用reducer然后调用subscribe…

Read More