【React Native教程】Redux入门教程
Redux定义
Redux 在 官网 上是这么定义的: A Predictable State Container for JS Apps ,直译过来就是一个使用在JS应用上的可预测的状态容器。
Redux解决的问题
Redux的核心逻辑和概念
Redux
的核心逻辑是集中定义和管理状态和动作执行,各个页面使用
connect
方法绑定相应的方法和状态,并通过发送动作指令更新页面显示。达到状态和操作与页面隔离的效果。
State
State 即状态,是 React 框架最基础的概念之一,通过更改状态实时更新页面显示。
1 |
{ |
Action
1 |
{ |
Reducer
1 |
function rootReducer(state = initialState, action) { |
Slice
1 |
const mySlice = createSlice({ |
在需要使用
Reducer
和
Action
时,直接抽取即可
1 |
const { action1, action2 } = authSlice.actions; |
Thunk
1 |
export const doLogin = createAsyncThunk( |
在上面的代码中,在
condition
可以控制这个异步
Action
是否可以继续执行,如果返回
false
,
Action
会终止执行而且没有回调。如果希望返回
false
后有
rejected
回调,可以设置
dispatchConditionRejection
为
true
。
异步
Action
执行完成后,回调是在
Slice
的
extraReducers
中,异步
Action
有三个状态:
pending
、
fulfilled
和
rejected
,分别代表正在执行、成功执行和执行失败
1 |
extraReducers: { |
Store
Store 是 Redux 的核心类,它的作用是管理所有的 Reducer 和中间件,并作为参数传递到项目的根视图组件中。
1 |
const middleware = [ |
Redux在React Native中的使用
下面以一个简单的计数器为例讲解一下如果在 React Native 中使用 Redux 。
安装依赖
首先需要安装**@reduxjs/toolkit ,可以使用 NPM 或者 Yarn**。
1 |
# NPM |
然后安装 Redux 核心库
1 |
# NPM |
创建Slice
创建
Slice
时会同步创建
State
、
Reducer
1 |
import {createSlice} from '@reduxjs/toolkit'; |
在这里创建了名为
count
的
Slice
,计算器初始值为0,并在
Reducer
中定义了两个
Action
:
incrementAction
和
decrementAction
,根据传过来的参数确定每次加减的数值。后面两行
export
代码确保外部能够访问这里创建的
Action
和
reducer
。
创建Store
接下来就是创建
Store
,创建时会传入刚刚创建的
reducer
。
注意:
在页面获取状态值的时候中间一定要先获取
reducer
,然后再获取
reducer
里的状态值,例如获取
countReducer
里的
value
:
state.count.value
。
1 |
import {configureStore, createSlice, getDefaultMiddleware} from "@reduxjs/toolkit"; |
至此, Redux 部分就准备好了,接下来就是页面的交互部分了。
页面嵌入Redux
在
index.js
文件中将
Provider
更改为
App
的根控件,并传入
store
作为参数:
1 |
AppRegistry.registerComponent(appName, () => ProviderContainer); |
下面是
App.js
的主要代码