Redux入门学习

作者: 邱雯腾 | 来源:发表于2019-05-31 12:20 被阅读5次

Redux是什么

Redux 解决数据传递的一个框架。简单的说就是把组件中的数据放到一个公用的存储区域去存储。

Redux的工作流程

React Component组件:相当于一个借书的人

Action Creactors:借书的人要借什么书,说出来要借什么书这句话

Store:图书馆管理员

Reducers:记录本(记录了有什么书、什么时候换)

以上流程可以简化抽象为,拿到书(数据):

首先我们需要一个借书人(component),其次我们要知道要借什么书(action),当明白自己的需求后,我们要找到图书馆管理员(store)去借书,图书馆管理员(store)查阅手册(Reducers)后拿到书,再把这本书拿给借书人(component)。

代码实现

1)安装redux

npm install --save redux

2)创建一个store

import { createStore } from 'redux'

let store = createStore();

export default store;

就像之前了解的,图书馆管理员记不住所有的图书,所以在创建它时需要一个小本子,记录当前所有的图书

import { createStore } from 'redux'

import reducer from './reducer'

let store = createStore(reducer);

export default store;

3)创建一个reducer,它返回的是一个函数

export default (state, action) => {

  return state;

}

state:整个图书馆的图书(整个store存储的数据)

action:用户传递过来的那句话

我们可以设置一个默认的数据

const defaultState = {

  inputVal: '',

  list: [1, 2, 3]

}

export default (state = defaultState, action) => {

  return state;

}

4)在组件中获取数据

假定我们的组件为:TodoList

1、引入store

import store from './store/index.js'

2、拿到数据

store.getState()

可以拿到:

{

  inputVal: '',

  list: [1, 2, 3]

}

5)在组件中改变数据

1、创建一个action

const action = {

   type: 'change_input_val',

   value: inputVal

}

type:告诉reducer,我要你做什么事情

value:传过去的值

2、把action传递给store(store会自动的把数据传递给reducer)

store.dispatch(action)

3、在reducer中加上对应处理的方法

const defaultState = {

  inputVal: '',

  list: [1, 2, 3]

}

export default (state = defaultState, action) => {

if (action.type === 'change_action') {

   let newstate = JSON.parse(JSON.stringify(state));

   newstate.inputVal = action.value;

   state = newstate;

}

return state;

}

4、组件中订阅数据的变化

store.subscribe(this.handleStoreChange)


优化代码

1)action——type的优化(避免出错)

const action = {

   type: 'change_input_val',

   value: inputVal

}

1、创建actionTypes.js文件,定义常量

export const CHANGE_INPUT_VALUE = 'change_input_value';

2、在TodoList组件中引入actionTypes.js

import CHANGE_INPUT_VALUE from '../actionTypes.js'

const action = {

   type: CHANGE_INPUT_VALUE,

   value: inputVal

}

3、同TodoList操作,在reducer中也同样引入actionTypes.js

2)使用actionCreateor统一创建action


中间件

中间件是介于Action 和 Reducer之间。


在没有使用中间件之前,action只能是一个对象,但是使用了中间件后,action可以是一个函数。

简单的说,就是对dispatch方法的升级,最原始的dispatch方法接受到一个对象后,会把这个对象传递给store。当升级后,如果传入的是函数,它不会直接把这个函数传递给store,而是先执行这个函数,需要传递给store的时候才传递给store。

代码实现

redux-thunk 为例

1)在store文件中,先引入applyMiddleware,使得我们可以使用中间件

import { createStore, applyMiddleware} from 'redux'

import reducer from './reducer'

let store = createStore(reducer);

export default store;

2)引入redux-thunk

1、引入之前需要安装redux-thunk

2、在store中引入中间件

import { createStore,  applyMiddleware} from 'redux'

import reducer from './reducer';

import thunk from 'redux-thunk';

let store = createStore(

  reducer,

  applyMiddleware(thunk)

);

export default store;

3)在action中添加方法(可以把请求接口拿到数据的方法搬到这)

相关文章

网友评论

    本文标题:Redux入门学习

    本文链接:https://www.haomeiwen.com/subject/czswtctx.html