Redux总结

1 redux工作流

1). store的创建(唯一性)

1. import createStore from 'redux'
2. 创建ruducer.js 文件
3. 将 import ruducer from './ruducer' 引入
4. const store = createStore(ruducer) 调用ruducer产生初始的state
5. 使用Redux DevTools 加 window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()

2). reducer

 1. 他是个纯函数(给固定的输入,就会给你出固定的输出,不能对原参数的数据进行修改)
 2. 根据老的state和action,产生新的state
 3. 不能直接修改老的state,深拷贝的方式(JSON的方法)
 const defaultState = {
    变量
 }
 export default (state= defaultState, action ) => {
    判断逻辑并将 oldstate 和 action 产生 newstate 
    return state
 }

3). store行为(component组件中)由 store调用

1. getState()方法 得到当前的状态值
2. dispatch(action) 分发action, 内部调用rudecer得到新的state,更新state,调用监听回调
3. subscribe(callback) 订阅更新的监听(重新渲染组件)
4. store是唯一的
5. 只有store能改变自己的内容

4). store内部数据

 reducer函数
 state

5). action creators

1. 用来创建action对象的函数
2. action = {type: 'XXX', yyy: data}

在这里插入图片描述
在这里插入图片描述

2 拆分action中的type actiontypes 都在store文件夹中创建( 好处报错能找到具体位置 )

    1. 创建 actiontypes.js
    2. 编写 文件 例如 export const XXX = 'xxx' XXX是type类型的大写方式
    3. 组件中引入 actiontypes.js (结构赋值的方式)
    4. reducer中引入 actiontypes.js (结构赋值的方式)

3 使用actionCreator统一创建action

    1. 创建 actionCreator.js
    2. 编写 文件 例如 export const 函数名字 = (value) =>({type: XXX, value}) 首先引入actiontypes.js
    3. 组件中引入 actionCreator.js (结构赋值的方式引入方法)

4 redux中的组件

    1. ui组件只注重ui和渲染,没有逻辑
    2. 容器组件只注重逻辑,没有ui
    3. 无状态组件 只有render函数-> 可以用函数代替,性能高

5.使用redux-thunk中间件进行ajax请求发送 (thunk使action不单是对象,也可以是个函数)

    1. 下载
	   npm install redux-thunk
    3. 引入
       import { createStore, applyMiddleware } from 'redux';
       import thunk from 'redux-thunk';
	   import rootReducer from './reducers/index';
	   // Note: this API requires redux@>=3.1.0
	   const store = createStore(
	      rootReducer,
	      applyMiddleware(thunk)
       );
    3.注意window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
       import { createStore, compose, applyMiddleware } from 'redux';
	   import thunk from 'redux-thunk';
	   import reducer from './reducer';
	   const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
	   const store = createStore(reducer, composeEnhancers(
		  applyMiddleware(thunk)
	   ));
	   export default store;
    4.把ajax代码放在actionCreator.js中 
      export const getTodolist = () => {
         return (dispatch) = {
            axios.get(url) .then(() =>{
              const data = res,data
              const action = initListAction(data)将action对象传入
              dispatch(action)
            })
         }
       }
    5.组件componentdidMount中调用返回action函数,并dispatch(action函数)

6.redux中间件

1.rudux中间件是action creator与store之间的中间件
2.其实就是对dispatch的一个升级,dispatch本身只能派发对象,使用thunk之后可以派发函数

在这里插入图片描述

7.redux-saga使用

    1.为什么使用
        redux-saga是一个用于管理redux应用异步操作的中间件,redux-saga通过创建sagas将所有异步操作逻辑收集在一个地方集中处理,可以用来代替redux-thunk中间件
    2.下载
	  npm install --save redux-saga
    3.创建
        创建 Saga.js
      function* mySaga() {
       }
       export default mySaga;
    4.引入
		import { createStore, compose, applyMiddleware } from 'redux';
	+   import createSagaMiddleware from 'redux-saga'
	+   import mySaga from './Saga'
		import reducer from './reducer';
    +   const sagaMiddleware = createSagaMiddleware()
		const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
		const store = createStore(reducer, composeEnhancers(
    +      applyMiddleware(sagaMiddleware)
		));
	+   agaMiddleware.run(mySaga)
		
		export default store;
    5.把ajax代码放在actionCreator.js中 
      export const getTodolist = () => ({
         type: GET_TODO_LIST
       })
    6.在actiontypes.js中写入GET_TODO_LIST
    7.组件componentdidMount中调用getTodolist(),返回action,并派发给store
    8.在saga.js中(generator 函数)
      import { takeEvery, put} from 'redux-saga/effects'
      import axios from 'axios
      function* getTodolist (){
        yield res = axios.get(url)
        const data = res.data
        const action = initListAction(data)将action对象传入
        yield put(action)
      
      }
      function* mySaga() {
        yield takeEvery(ActionType, getTodolist);
      }  
      export default mySaga;

8.react-redux使用(第三方插件)

    1.下载
	   npm install --save react-redux
    2.引入
      在index.js中
      import store from './store';
      import {Povider} from 'react-redux'
      const App = {
        <Povider store={store}><需要渲染的根组件A/></Povider>
      }
      ReactDOM(App, document.getElementById('root'))
   3.使用
     在组件中
         import {conncet} 'react-redux'
        const mapStateToProps = (state) => {
         return {
           值名:state.}
        }
        const mapDispatchToProps = (dispatch) => {
         return {
           处理点击的等函数
         }
        }
        export defalut conncet(mapStateToProps, mapDispatchToProps)(需要渲染的根组件A)
        
        使用 this.props.值名 this.props.处理点击函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值