背景
参考前端学习系列2:从移动端的角度学习与分析Redux一文,在React中Redux框架被用来将展示与数据分离以及管理状态的变化,扩展性非常好,而且便于测试,那我们不禁想到,能不能把这样一套框架移植到Android原生开发中来。
Redux核心框架
上图展示了Redux的数据流向:
当用户操作View时可能引发数据的变化,这时候会经由ActionCreator产生特定的Action传递给Store;
Store在接收到Action后,将其分发给Reducer进行处理,而Reducer内部会根据Action更新对应的数据,产生新的State返回给Store;
Store最终将更新的状态State通知给View,改变UI刷新页面
TODO应用
基础功能实现过程
我们先看下基于Redux框架如何完成添加TODO item以及修改item状态这些基本功能:
定义状态State
在TODO应用中我们首先需要保存一个TODO item的信息列表,因此state应该对应的是List这样一种数据类型
定义交互的Actions
·每一个Action应该包含两部分内容,一部分是Action的类型标识,另一个部分传递的是附加的数据。
public class Action { public final String type; public final Object value; public Action(String type, Object value) {...}
}
具体到本应用,我们需要创建添加和修改item这两种操作对应的Action,为了保证代码的复用和整洁,通常Action的创建要依赖ActionCreator。
public class TodoActions{ public static final String ADD_ITEM = "ADD_ITEM"; public static final String CHANGE_STATE = "CHANGE_STATE"; public static Action addItem(TodoItem item){ return new Action(ADD_ITEM, item);
} public static Action changeState(long id, boolean isChecked){ return new Action(CHANGE_STATE, Pair.create(id, isChecked));
}
}
创建Reducer
在定义好Actions后,我们需要知道如何去处理它们,也就是实现Reducer接口
public interface Reducer{ State reduce(State state, Action action);
}
reduce方法接收两个参数,一个是当前状态&