其实用过Angular.js的开发者都会知道状态管理的重要性,当应用,程序状态分散在不同地方时,就会使得状态难以管理,并且容易出现Bug,直到Flux出现提出了单一资料源(Single Source of Truth)及单向资料流(unidirectional data flow)等概念后,状态管理的问题才得到了缓解。而Redux的出现利用Funtional Programming的手法大幅度的降低原先Flux的複杂度以及学习成本,如果我们依照Redux的架构已经可以把因为状态複杂度而陡然上升的维护成本控制得很好,那如今为什麽我们还需要一个新的状态管理工具呢?
缺乏清晰的状态描述
不管是使用Redux或其他相关的Library都会有状态难以清晰描述的问题,最主要原因有两个,第一个是我们完全混合了状态(state)跟资料(context),所有东西都直接往Reducer裡面塞导致我们无法分清楚哪些是资料、哪些是状态。这裡的资料(context)指的是显示在页面上的内容,通常这些资料会存储在后端并透过API取得,在XState称之为context,在UML State Mechine裡面称为Extended states;而状态(state)则是指应用,程序当前的状态,比如说是否已登入或者Menu是否展开等等状态。