Redux入门教程(快速上手).docx





《Redux入门教程(快速上手).docx》由会员分享,可在线阅读,更多相关《Redux入门教程(快速上手).docx(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、满满的干货,耐心看完,你会发现redux原来这么可爱。典型的Web应用程序通常由共享数据的多个UI组件组成。通常, 多个组件的任务是负责展示同一对象的不同属性。这个对象表示可 随时更改的状态。在多个组件之间保持状态的一致性会是一场噩梦, 特别是如果有多个通道用于更新同一个对象。举个小栗子,一个带有购物车的网站。在顶部,我们用一个UI组件显示购物车中的商品数量。我们还可以用另一个UI组件,显示购物车中商品的总价。如果用户点击添加到购物车按钮,那么这两个组件应立即更新当前的数据。 如果用户从购物车中删除商品、更改数目、使用优惠券或者更改送货地点,那么相 关的UI组件都应该更新出正确的信息。可以看到
2、,随着功能范围的扩大,一个简单的购物车将会很难保持数据同步。在这篇文章中,我将介绍Redux框架,它可以帮助你以简单易用的方式构建复 杂工程并进行维护。为了使学习更容易,我们将使用一个简化的购物车工程来学习 Redux的工作原理。你需要至少熟悉React库,因为你以后需要将其与Redux 集成。学习前提在我们开始以前,确保你熟悉以下知识: 函数式 JavaScript 面向对象JavaScript JavaScript ES6 语法同时,确保你的设备已经安装: NodeJS Yarn(或者 npm)return statejcart: .state.cart, actioi,payload)d
3、efault:return state;)我们继续来分析一下代码。一个reducer需要处理不同的action类型,因此我们 需要一个sw/tch语句。当一个add_to_cart类型的action在应用程序中分发时, switch中的代码将处理它。正如你所看到的,我们将actio.payload中的数据与现有的State合并以创立一个 新的state o接下来,我们将定义一个action,作为store/i平的一个参数。action是一个Javascript对象,有一个必须的type和可选的payload0我们在cartRcdaccr函数 后定义一个:.functioA addToCart(
4、productj八力tg以八itCost) return (type: ADD_TART,payload: product, quantity, a八itCost )在这里,我们定义了一个函数,返回一个JavaScript对象。在我们分发消息之前, 我们添加一些代码,让我们能够监听store事件的更改。.let 八subscribe = storesuhscribe(C)=co 八so/eog(store.g 况State。);八subscKibeO;接下来,我们通过分发消息到#此来向购物车中添加商品。将下面的代码添加在八subscnbcO之前9 9 stoire.dispatck(addTo
5、Cairt(Coffee 5OOqw,25。);stoire.dispatch(addToCartCFlour lkg- 2 1165);store.dispatcaddToCartCJuice 2L,1, 25。);下面是整个index.js文件:/ s匕/Mdexjsimport createStore rcdx”;import combi八 cRcdaccrs fro ha 什co八st ?HodctsRedceK = f八ctio八(state=L actioi return state;covst initialstate = cart:product: bread 700g1,qi
6、Aantitg: 2)c(八itCost: 90)(productMilk 5OOw,quantity:LiiitCost: 47)cot ADDJCLCART = ADDUCART;co八st cartKeduceir =八cti。八(state=/认i力飞/Stateaction switch (actio八.tgpe) case ADDUCART: return statejcart: .state.cairtj actioi,payload)default:return state)fb(八cti。八 addToCart(productj quantitg,以八itCost) retu
7、rn type: ADDJTONART,payload: prodiACtjqua八titg)认八itCost)cost altRediAcers = products: piroductsReducer,shoppiigCart: cartRediAcer c。八st rootReducer = coH/xbi八eRea“ced(aRedced);let store = createStore(rootR.educer);console.log(initial state: u, store.getStateQ);let 八subscribe = storc.s“bscribc(0 =coo
8、le.log(store.getStateQ);store.dispatcaddToCartCCoffee SOOgwngCart; cart: Array43) 0: (product: 1: product: 2: (product: length: 3bread 70g*t quantity: 2. unitCost: 90) 500vli3 quantity: l. unltCost: 47)Cotfe 5$0k. Quantity: L unitCost: 2M) proto : Array(O) protc : Object proto : Objectv (producti: A
9、rray(6L oppingCart: f_。 products: I) sboppingCirt: cirt: Array(4) 0: (product: *bred 7S0g*, quantity: 2. unitCost:骗 1: (product: ilk 566L quantity: 1 unltCost: 47) 2: product: eCoffec owntity: L unitCost: 2$9), 3: (prodixt: Tlour lkga, quantity: 2. unltCost: 116) length: 4 proto : Array(O)-proto : O
10、bject proto : Object fprWi/cfs: A”(。). shopingCrt:, products:( shoppingCirt: cart: ArryS)1Mx, 2: 3:coole.log(tore.getStateQ);stoircdispatch(ac以ToCart(Coffce 5003 1, 25。);store.dispatcaddToCartCFlour 1kg,2,。);store.dispatcaddToCairtJiAice 2L-1,25。);tmsubscKibeO;整理完代码之后,程序依然会正常运行。现在我们来添加修改和删除购物车中商 品的逻
11、辑。修改 cart-actions和 cart-rediAcer.js 文件:/ SKc/Kcducers/c4rt-4cti。八sjs.export coiat UPPATE_6?ART = UPDATE_CART;export const DELETE_FROM_CART 二,DELETE_FROM_CAR;.export 缶八cti。八 lApdateCart(prodiACt, quantitg,b(八itCost) return type: UPDATENART)payload: 什么是ReduxRedux是一个流行的JavaScript框架,为应用程序提供一个可预测的状态容器。Re
12、dux基于简化版本的Flux框架,Flux是Facebook开发的一个框架。在标准的MVC框架中,数据可以在UI组件和存储之间双向流动,而Redux严格限制了 数据只能在一个方向上流动。见下列图:ComponenttriggerAction subscribe itei.product = actio.payload.pirodiACt ?actioiM.payload : itenA)case DELETE_FROM_CART: return (.state,cart: = itei.product /= actioin.payload.product1)default:return sta
13、te;最后,我们在Wex.js中分发这两个actio八:/ src/indexjs./ Update Cartstore.dispatcupdateCartFlour lkg15, lit?);/ Delete 伍必 CartstoY。.dispatch。加tcWoMCartCCoffcc SOOgw 保存完代码之后,可以在浏览器的控制台中检查修改和删除的结果。使用Redux工具调试如果我们的代码出错了,应该如何调试呢?Redux拥有很多第三方的调试工具,可用于分析代码和修复bug。最受欢迎的是 time-travelling tool, redux-devtools-extensiono 设
14、置它只需要三个步骤。 首先,在Chrome中安装Redux Devtools扩展。 然后,在运行Redux应用程序的终端里使用ctc停止服务器。并用npm 或 yarn 安装 r以ux-devtook-extension 包。yam add 丫cd认乂一devtools -exte八si。八 一旦安装完成,我们对贪0K&js稍作修改:/ sre/storejsimport cireateStore Fkom redax”;import cokposeWitkDcuTook j F/om1 redux -devtools -exteisioi1; i import irootReducer fr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Redux 入门教程 快速 上手

限制150内