博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redux的中间层 --reactjs学习
阅读量:4877 次
发布时间:2019-06-11

本文共 2579 字,大约阅读时间需要 8 分钟。

React只负责UI层,也就是我们通常在MVC框架中 所说的View层,所以在使用React开发中 我们得引入Redux

负责Model

一开始学习Redux的中间层 有点 摸不到头,

其实只要你注意观察,这个所谓的middlerware其实就是一个 责任链

 

import { applyMiddleware, createStore } from "redux";const reducer = (initialState=0, action) => {  if (action.type === "INC") {    return initialState + 1;  } else if (action.type === "DEC") {    return initialState - 1;  } else if (action.type === "MULT") {    throw new Error("AHHHH!!");  }  return initialState;}const logger = (store) => (next) => (action) => {  console.log("Logged", action);  return next(action);//打印action 然后将调用 next函数 将action对象 交给 责任链上的下一个处理函数};const errorHandler = (store) => (next) => (action) => {  try {    return next(action);//同上,先try catch 然后把action对象 交给责任链上的下一个处理函数  } catch(e) {    console.log("ERROR!", e);  }};const middleware = applyMiddleware(  logger,  errorHandler)const store = createStore(reducer, middleware)store.subscribe(() => {  console.log("store changed", store.getState());})store.dispatch({type: "INC"})store.dispatch({type: "INC"})store.dispatch({type: "INC"})store.dispatch({type: "DEC"})store.dispatch({type: "DEC"})store.dispatch({type: "DEC"})store.dispatch({type: "MULT"})store.dispatch({type: "DEC"})

 

-------------

下面是异步IO的责任链设计

 

import { applyMiddleware, createStore } from "redux";import axios from "axios";import logger from "redux-logger";import thunk from "redux-thunk";import promise from "redux-promise-middleware";const initialState = {  fetching: false,  fetched: false,  users: [],  error: null,};const reducer = (state=initialState, action) => {  switch (action.type) {    case "FETCH_USERS_PENDING": {      return {...state, fetching: true}      break;    }    case "FETCH_USERS_REJECTED": {      return {...state, fetching: false, error: action.payload}      break;    }    case "FETCH_USERS_FULFILLED": {      return {        ...state,        fetching: false,        fetched: true,        users: action.payload,      }      break;    }  }  return state}const middleware = applyMiddleware(promise(), thunk, logger()) //这里加入了thunk promise() logger() //都是责任链上的某一个环节,promise 负责异步IO 返回的时候 , //再一次重新调用dispatch函数,并修改type类型为 FETCH_USERS_PENDING 等情况  本质上就是在我们的type类型上 根据异步IO返回的结果 再一次添加了PENDING等状态 然后再调用dispatch函数分发action const store = createStore(reducer, middleware)store.dispatch({  type: "FETCH_USERS",  payload: axios.get("http://rest.learncode.academy/api/wstern/users")})

 

 

reference:

Connecting React & Redux - Redux Tutorial  youtube.com

reactjs  http://www.ruanyifeng.com/blog/2016/09/redux_tutorial_part_three_react-redux.html

转载于:https://www.cnblogs.com/winters1992/p/6189300.html

你可能感兴趣的文章
Python之路,Day21 - 常用算法学习
查看>>
Android安全-代码安全1-ProGuard混淆处理
查看>>
部署core
查看>>
mysql 时间设置
查看>>
如何在 Xcode 中修改应用的名字
查看>>
[BZOJ5334][TJOI2018]数学计算(exgcd/线段树)
查看>>
[BZOJ4340][BJOI2015]隐身术(后缀数组)
查看>>
有关交换机——熟悉原理是必须的【转载】
查看>>
ACM(数学问题)——UVa202:输入整数a和b(0≤a≤3000,1≤b≤3000),输出a/b的循环小数表示以及循环节长度。...
查看>>
【转】Android 读取doc文件
查看>>
js 数据绑定
查看>>
jsp的C标签一般使用方法以及js接收servlet中的对象及对象数字
查看>>
H5 简介
查看>>
window.frameElement的使用
查看>>
nl命令
查看>>
如何使用jQuery $.post() 方法实现前后台数据传递
查看>>
Using Flash Builder with Flash Professional
查看>>
jsp/post中文乱码问题
查看>>
C# 插入或删除word分页符
查看>>
数据库数据的查询----连接查询
查看>>