ReactNative|ReactNative Redux flow
关于Redux,理解Redux flow的工作逻辑图
文章图片
Redux flow
1. Action
Action 是把数据从应用传到 store 的有效载荷。它是 store 数据的唯一来源。一般来说你会通过添加新 todo 任务的 action 是这样的:store.dispatch()
将 action 传到 store。
const ADD_TODO = 'ADD_TODO'
Action 创建函数
function addTodo(text) {
return {
type: ADD_TODO,
data: text
}
}
Redux 中只需把 action 创建函数的结果传给 dispatch() 方法即可发起一次 dispatch 过程。
dispatch(addTodo(text));
store 里能直接通过store.dispatch()
调用dispatch()
方法,但是多数情况下你会使用 react-redux 提供的connect()
帮助器来调用。bindActionCreators()
可以自动把多个 action 创建函数 绑定到dispatch()
方法上。
文章图片
image.png
(property) dispatch: Dispatch
(action: any) => any
也就是 :
import { Dispatch } from 'redux';
export const setSomeText = (
dispatch: Dispatch,
) => {
......
dispatch(addTodo(text))
};
2. Reducer
Reducers 指定了应用状态的变化如何响应在 Redux 应用中,所有的 state 都被保存在一个单一对象中。建议在写代码前先想一下这个对象的结构。如何才能以最简的形式把应用的 state 用对象描述出来?actions
并发送到 store 的,记住 actions 只是描述了有事情发生了这一事实,并没有描述应用如何更新 state。
dispatch数据之后, 也就是传入store之后,如果要获取数据.
const InitState: string ='hello world';
const getSomeText = ( state = InitState, action: { type: string;
data: string } ): string => {
const { type, data } = action;
switch (type) {
default:
return state;
case ADD_TODO:
return data as string;
}
};
以 todo 应用为例,需要保存两种不同的数据:
- 当前选中的任务过滤条件;
- 完整的任务列表。
Store 就是把它们Action和Reducer联系到一起的对象。Store 有以下职责:
- 维持应用的 state;
- 提供
getState()
方法获取 state; - 提供
dispatch(action)
方法更新 state; - 通过
subscribe(listener)
注册监听器; - 通过
subscribe(listener)
返回的函数注销监听器。
对Redux flow理解
1.UI界面的事件, 通过Action将数据传递到Reducer
2.Reducer通过哪种过滤条件和怎么样的数据格式将数据更新到Store.
3.Store通过存储在Store中的state元素, setState更新.
4.setState发生变化, 重新render渲染
值得注意 :
dispatch(action)
中 action
返回的是一个对象, 最终是一个对象, 所以dispatch(对象)
, 更新某一个对象.
【ReactNative|ReactNative Redux flow】PS : 如果是要dispatch(function)
呢, 这里就需要用到一个中间件 redux-thunk
思考 : 那么
dispatch(对象)
能做到更新store中的值, 那么dispatch(function)
的应用场景是什么?推荐阅读
- 带你了解类型系统以及flow和typescript的基本使用
- 3.css浮动
- 为Google|为Google Cloud配置深度学习环境(CUDA、cuDNN、Tensorflow2、VScode远程ssh等)
- com.android.dex.DexIndexOverflowException
- 大众点评(redux架构)
- ubuntu16.04-caffe-tensorflow安装教程
- demo1:|demo1: Tensorflow实现Linear regression
- Git|Git branching strategy integated with testing/QA process - Stack Overflow
- tensorflow的堆叠多层RNN
- vue安装|vue安装 flow - 2018-06-26