首页
学习
活动
专区
圈层
工具
发布

我是这样在 React 中实践 TDD 编程的

用户可以: 创建用户 更新用户 删除用户 获取用户或用户列表 这个小项目中的用户将有四个属性: id\name\username\email 为了简单起见,我们不编写UI代码。...mock适配器将帮助我们模拟服务器上的请求。...该文件将包含以下方法和变量: mockNetWorkResponse:在默认实例上创建mock适配器,并模拟到所需端点的任何GET或POST请求; getCreateUserResponse:返回/user...准备好mock适配器后,我们就可以专注于初始化存储和并编写测试了。 编写测试 这是最有趣的部分。让我们开始TDD。 首先,让我们创建并配置存储。在src目录中,创建一个名为index.js的新目录。...在这个目录中,添加一个名为user.test.js的文件。这个文件将包含我们将为userSlice编写的测试。 第一个测试是确保存储是空的或未定义的。

3.3K30

Redux 快速上手指南

Redux基于简化版本的Flux框架,Flux是Facebook开发的一个框架。在标准的MVC框架中,数据可以在UI组件和存储之间双向流动,而Redux严格限制了数据只能在一个方向上流动。...另外在组件的树状阶层结构,父组件(拥有者)与子组件(被拥有者)的关系上,子组件是只能由父组件以props(属性)来传递属性值,子组件自己本身无法更改自己的props,这也是为什么一开始在学习React时...在简单的应用程序中,这沟通方式还可行,但如果是在有复杂的组件嵌套阶层结构时,例如层级很多或是不同树状结构中的子组件要互相沟通时,这个作法是派不上用场的。...payload - 用于更新状态的数据。 创建一个Redux存储区,它只能使用reducer作为参数来构造。存储在Redux存储区中的数据可以被直接访问,但只能通过提供的reducer进行更新。...现在,我们的cartReducer什么也没做,但它应该在Redux的存储区中管理购物车商品的状态。我们需要定义添加、更新和删除商品的操作(action)。

1.8K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【重学React】动手实现一个react-redux

    每个需要与 redux 结合使用的组件,我们都需要做以下几件事: 在组件中获取 store 中的状态 监听 store 中状态的改变,在状态改变时,刷新组件 在组件卸载时,移除对状态变化的监听。...创建 connect.js 文件 文件创建在 react-redux/components 文件夹下: 我们将重复的逻辑编写 connect 中。...方法作为属性传递给被包装的属性。...目前,我们仅传递了 store.getState() 给 mapStateToProps,但是很可能在筛选过滤需要的 state 时,需要依据组件自身的属性进行处理,因此,可以将组件自身的属性也传递给...当 React 渲染一个订阅了这个 Context 对象的组件,这个组件会从组件树中离自身最近的那个匹配的 Provider 中读取到当前的 context 值。

    3.6K20

    精读《设计模式 - Memoto 备忘录模式》

    撤销重做 如果撤销重做涉及到大量复杂对象,每个对象内部状态的存储结构都不同,如果一个一个处理,很容易写出 case by case 的冗余代码,而且在拓展一种新对象结构时(如嵌入 ppt),还需要在撤销重做时对相应结构做处理...游戏保存 玩过游戏的同学都知道,许多游戏支持设置与读取多种存档,如果转换为代码模式,我们可能希望有这样一种 API 进行多存档管理: // 创建一盘游戏。...其实在游戏保存的例子中,存档就是备忘录(Memoto),而主进程管理游戏状态时,只是简单调用了 createArchive 创建存档,与 load 读取存档,即可实现复杂的游戏保存与读取功能,全程是不需要关心游戏内部状态到底有多少...结构图 Originator:创建、读取备忘录的发起者。 Memento:备忘录,专门存储原始对象状态,并且防止 Originator 之外的对象读取。...其实践行备忘录模式最好的例子就是 Redux,当项目所有状态都使用 Redux 管理时,你会发现无论是撤销重做,还是保存读取,都可以非常轻松完成,这时候,不要质疑为什么备忘录模式还在解决这种 “遇不到的问题

    55620

    医疗数字阅片-医学影像-Redux中的reducer到底是什么,以及它为什么叫reducer?

    Action表示应用中的各类动作或操作,不同的操作会改变应用相应的state状态,说白了就是一个带type属性的对象。 Store则是我们储存state的地方。...我们通过redux当中的createStore方法来创建一个store,它提供3个主要的方法,在这里我们可以模拟一下createStore的源码: // 以下代码示例来自redux官方教程 const...createStore = (reducer) => { let state; let listeners = []; // 用来返回当前的state const getState =...== listener); }; }; return { getState, dispatch, subscribe }; }; Reducers 指定了应用状态的变化如何响应...有任何好的意见或者是建议欢迎在评论区参与讨论,如果文中有任何错误也欢迎在评论区批评指正。 参考资料 Why is a Redux reducer called a reducer?

    1.2K10

    React进阶(2)-上手实践Redux-如何获取store的数据

    例子对于入门redux是一个非常好的实践,这就好比刚写程序时的Hello-world,虽然麻雀虽小,但是五胀俱全 在React中要使用Redux时,必须先要在命令行终端下进行安装 使用npm或者cnpm...在组件内部通过getState()方法就可以拿到store里面的数据,该方法能够获取到store上存储的所有状态         this.state = store.getState();         ...创建reducer函数,用于存储公共组件的数据状态,它是一个纯函数,用于返回组件的状态 /*  reducer是一个纯函数,接收两个参数,state和action其中state存储的就是组件的公共状态的...组件内如何获取store中数据,通过调用getState方法获取store中的数据,该方法能够获取到store上存储的所有状态,该方法放置的位置是在constructor函数里面 this.state...进而store就获取到了reducer函数里面的组件公共存储的数据,当组件外部想要拿store的公共数据时 于是引入store,并通过getState这个函数就可以获取store中的所有数据,最终可将数据渲染到页面上

    2.8K20

    React进阶(2)-上手实践Redux-如何获取store的数据

    Hello-world,虽然麻雀虽小,但是五胀俱全 在React中要使用Redux时,必须先要在命令行终端下进行安装 使用npm或者cnpm,yarn(使用yarn时,需要先安装它,然后才可以使用)进行安装...在组件内部通过getState()方法就可以拿到store里面的数据,该方法能够获取到store上存储的所有状态 this.state = store.getState();...创建reducer函数,用于存储公共组件的数据状态,它是一个纯函数,用于返回组件的状态 /* reducer是一个纯函数,接收两个参数,state和action其中state存储的就是组件的公共状态的...组件内如何获取store中数据,通过调用getState方法获取store中的数据,该方法能够获取到store上存储的所有状态,该方法放置的位置是在constructor函数里面 this.state...进而store就获取到了reducer函数里面的组件公共存储的数据,当组件外部想要拿store的公共数据时 于是引入store,并通过getState这个函数就可以获取store中的所有数据,最终可将数据渲染到页面上

    2K10

    Redux的设计模式

    实际上在大型的网站中类似这样需要共享数据的情况非常常见,如果我们通过回调函数这样来一层一层传递你会发现整个网站的代码会变得非常恶心。基本上你的代码就是无法维护的状态。...使用Redux架构来说所有的组件基本不会互相通信了,数据放在一个叫做store的数据仓库中存储。 ?...getState来获取数据,通过subscribe订阅来监听数据的变化,因为Redux是一种发布订阅模式,只有监听才会获取到。...store.subscribe(() => { const state = store.getState(); })) 需要更数据时,需要使用dispatch配合action来分发。...我们约定action需要是一个拥有type属性的对象,type来表示要操作的类型,如果传递参数我们一般将参数放在payload属性中。

    1.9K20

    React的诱惑: React-Redux-三大原则和React-Redux-基本使用、优化、综合运用、其他组件使用

    Redux 三大原则单一数据源整个应用程序的 state 只存储在一个 store 中Redux 并没有强制让我们不能创建多个 Store,但是那样做并不利于数据的维护单一的数据源可以让整个应用程序的...store.subscribe(() => { console.log(store.getState());});从 Store 中获取存储的状态console.log(store.getState...store.subscribe(() => { console.log(store.getState());});从 Store 中获取存储的状态console.log(store.getState...-其它组件中使用紧接着React-Redux-综合运用(在React中使用)的内容,下面介绍的是 Redux 在其它组件当中的使用以及注意点,在 src 目录下创建一个 component 目录在目录当中创建一个...最后本期结束咱们下次再见~图片 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。

    93750

    把redux当做观察者单独使用

    我们知道在观察者模式中,观察者对象一般会有两个方法,一个用来监听事件,一个用来发布消息,另外其内部一般有一个不可以见的属性来存储事件,这个属性通常为一个数组。...简单的使用redux的话,有如下几个步骤: 1、导入redux,并导出createstore方法 2、创建reducer 3、调用createstore传入reducer穿件store 4、用store...上面的代码是有点需要优化的,我们在开发时,store往往比较复杂,我们需要将不同的状态保存到不同的reducer中,而不是统一放在一起。...方法获取store树的值 console.log(store.getState()); 使用步骤如下: 1、引入redux,并导出createStore和combineReducers 2、编写reducers...,这个的每个属性分别指向单独定义热reducer,如图: image.png 了解了store的结构和配置过程,接下来了解如何使用。

    1.8K21

    Reduxreact-reduxredux中间件设计实现剖析

    这不就和redux的三个API:getState、dispatch、subscribe对应上了吗。...' }) //初始化store数据 return { getState, subscribe, dispatch } } 我们来试一下这个subscribe(这里我就不创建组件再引入...store再subscribe了,直接在store.js中模拟一下两个组件使用subscribe订阅store变化): import { reducer } from '....尽管说我们已经实现了redux,但coder们并不满足于此,我们在使用store时,需要在每个组件中引入store,然后getState,然后dispatch,还有subscribe,代码比较冗余,我们需要合并一些重复操作...,我们可以写个demo来测试一下:使用react-create-app创建一个项目,删掉无用的文件,并创建store.js、reducer.js、react-redux.js来分别写我们redux和react-redux

    2.6K20

    手把手教你全家桶之React(二)

    前言 上一篇已经讲了一些react的基本配置,本遍接着讲热更新以及react+redux的配置与使用。 热更新 我们在实际开发时,都有用到热更新,在修改代码后,不用每次都重启服务,而是自动更新。.../reducers'), //redux:path.join(__dirname,'src/redux') 与模块重名 } 创建action,action是来描述不同的场景,通过触发action进入对应...mapStateToProps:把redux的state,转为组件的Props; mapDispatchToprops:触发actions的方法转为Props属性函数。...connect()的作用有两个:一是从Redux的state中读取部分的数据,并通过props把这些数据返回渲染到组件中;二是传递dispatch(action)到props。...下面我们模拟一个用户信息的get请求接口: 创建文件 cd dist mkdir api && cd api touch userInfo.json 打开文件模拟数据 { "name":"circle

    1.7K30

    redux基础概念及执行流程详解

    1.执行createStore 创建一个容器store来用来管理公用的状态信息 创建一个事件池,用来存储一些方法(方法一般都是用来通知某个组件重新渲染的) 当容器中的状态改变,会自动通知事件池中的方法依次执行...2.基于store.getState可以获取容器中存储的状态信息(拿到状态信息就可以做数据绑定等操作了) 3.我们可以基于store.subscribe向事件池中追加方法(也可以移除事件池中的方法)...image.png 2.具体代码 App.js import {createStore} from 'redux' /** * 创建redux容器用力啊管理公共的状态信息 * 1.创建容器的时候其实已经准备好了管理员...reducer了 * 2.createStore(reducer):相当于创建一个容器并雇佣了一个管理员reducer * 3.创建出来的store存在几个属性:getState/dispatch/...store,从而执行一些其它的操作(当然也可以基于属性) //reducer管理员是一个方法:reducer方法是在dispatch派发的时候执行的 //state:现有store容器中的状态信息(如果

    1K10
    领券