首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

是否可以在reducer中使用getState()?

在Redux中,reducer是一个纯函数,它接收先前的状态和一个action作为参数,并返回一个新的状态。reducer的作用是根据action的类型来更新状态。

在reducer中使用getState()是不推荐的,因为reducer应该是一个纯函数,它只依赖于传入的参数,不应该有任何副作用。getState()是用于获取当前的状态,它是store对象的方法,如果在reducer中使用getState(),会导致reducer的行为变得不可预测,因为它依赖于外部的状态。

在Redux中,如果需要在reducer中获取当前的状态,可以通过将状态作为参数传递给reducer来实现。例如,可以在action中将当前的状态作为payload传递给reducer,然后在reducer中使用这个状态来更新状态。

总结起来,不建议在reducer中使用getState(),而是应该通过将状态作为参数传递给reducer来实现对当前状态的访问和更新。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java是否直接可以使用enum进行传输

首先在阿里的规范里是这样说的: 【强制】二方库里可以定义枚举类型,参数可以使用枚举类型,但是接口返回值不允许使用枚举类型或者包含枚举类型的 POJO 对象。 那到底为啥不能用呢?...枚举 首先我们得先思考一下枚举是否可以进行序列化,我们把对象进行传输的时候需要将这个对象序列化为字节序列进行传输(linux中一切皆文件,JVM虚拟机将对象变为字节给到内核通过传输协议进行打包传)枚举进行编译后会生成一个相关的类...只是拿了对应枚举的name(感觉是个坑啊),这也阿里规范不能使用枚举放在DTO的原因之一吧== ?...上面的内容整明了枚举是可以进行序列化的,是可以被传输的,他的实现也是通过类来实现的,除了fastJSON那一步,使用都没有问题的。...(我觉得这个假设是参数可以使用枚举型的前提)在这个假定下如果我们接口中使用枚举型,如孤尽兄java开发手册中所述,分为参数和返回值两种情况。

3.7K10

go struct 是否可以比较?

由于已经有很多其他的文章说过这个问题,我这里赘述就显得多余,所以我直接给出结论,并直接说明实际中用的上的。 为什么要比较? 原本这应该是某人想出的面试题,但是如果光光是解决这个问题的话,太应试了。...那比较的原因,肯定是我们需要知道两个结构体是否相等。 比较的依据 两个结构体是否相等,比价的依据有两个: 两个结构体的地址是否相等?(比较地址) 两个结构体的所有字段是否都相等?...比较内容 这个是实际确实会使用到的情况,我们有可能需要比较两个结构体的内容是否完全一致,那么我们是否可以使用 == 来进行比较呢?..."star"} u3 := u fmt.Println(u == u2) // true fmt.Println(u == u3) // true } 输出很正常,好像可以...但,其实不然 重点 2:当结构体内存在不可比较的类型时(slice、map、function),使用 == 比较会报错。

78420
  • PHP检测一个类是否可以被foreach遍历

    PHP检测一个类是否可以被foreach遍历 PHP,我们可以非常简单的判断一个变量是什么类型,也可以非常方便的确定一个数组的长度从而决定这个数组是否可以遍历。那么类呢?...我们要如何知道这个类是否可以通过 foreach 来进行遍历呢?其实,PHP已经为我们提供了一个现成的接口。...而第二个 $obj2 则是实现了迭代器接口,这个对象是可以通过 Traversable 判断的。PHP手册,Traversable 接口正是用于检测一个类是否可以被 foreach 遍历的接口。...这是一个无法 PHP 脚本实现的内部引擎接口。IteratorAggregate 或 Iterator 接口可以用来代替它。...相信我们决大部分人也并没有使用过这个接口来判断过类是否可以被遍历。但是从上面的例子我们可以看出,迭代器能够自定义我们需要输出的内容。相对来说比直接的对象遍历更加的灵活可控。

    2K10

    SQL里是否可以使用JOIN

    很多公司都禁止程序员 SQL 中使用 JOIN,至于原因则出奇的一致:用 JOIN 慢。...第一次查询得到帖子数据,然后程序代码里收集好想要的 user_id,第二次查询通过 user_id 得到用户数据,接着程序代码里把两份数据组合起来。 哪个快?...至于 SQL 里是否可以使用 JOIN,如果相关的表以后有独立部署的可能性,那么就要考虑避免使用 JOIN,否则用 JOIN 也无妨。...当然,有人会找出一些使用 JOIN 后效率奇差的例子,不过这样的问题一来可能是索引不佳,二来可能是特殊情况,用不用 JOIN 都会有类似的问题,只要使用的时候留意即可。...下次如果大家再听到别人以性能为由反对 JOIN 的使用,那么不妨把本文的链接发给他,因为他多半没有搞清楚真正的原因是什么。

    54420

    myabtis是否可以映射 Enum 枚举类

    有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top MyBatis映射Enum枚举类 MyBatis,映射Enum枚举类是完全可行的...使用TypeHandler映射枚举 MyBatis的TypeHandler接口允许你定义如何将Java类型和数据库类型进行转换。...使用MyBatis内置的EnumTypeHandler MyBatis 3.4.5及以上版本内置了EnumTypeHandler,它可以自动映射枚举的名称(name()返回的值)到数据库的字符串。...如果你想映射枚举的序数(即其枚举声明的位置),你可以使用EnumOrdinalTypeHandler。...是支持的,并且可以通过自定义TypeHandler或使用MyBatis内置的EnumTypeHandler来实现。

    61110

    PyCharm:设置是否SciView绘图

    Python来构建简洁、易于使用的软件应用程序和代码库。...PyCharm是使用最广泛的一种集成开发环境适用于Python编程语言。...有时候用PyCharm写代码,特别是用到matplotlib等库进行绘图时,图像常常会绘制右侧的SciView窗口中,这样往往会遮挡住图像,特别是你的屏幕如果比较小的话,遮挡就比较麻烦了~~~ 特别是以下几种情况...可以看到,默认设置的时候只有一个窗口: 所以,能不能将图像单独建立一个新窗口呢?...: 可以看到,我们现在可以看到这个图是如何被一步一步绘制出来的: 并且,现在专门新建了一个窗口用于绘图: 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn

    3.2K10

    CSP-JS考试是否可以使用万能头文件

    include #include #include #include #endif CSP-J.../S考试是可以使用万能头文件的。...使用了万能头文件之后,就不再需要包含其他头文件了。 使用万能头文件,会把大量的不需要用到的头文件也包含进去,这样会增加编译时间。...也就是说,考试时既可以逐个包含需要用到的头文件,也可以一次性包含万能头文件。 但是,就平时练习来说,建议不要使用万能头文件。理由有三: 第一,万能头文件,也叫“懒人专用头文件”。...第二,万能头文件只存在于GCC编译器,clang和MSVC编译器并没有万能头文件。 第三,除了CSP-J/S外,有时候还有一些其他的考试。有些考试会明确规定不允许使用万能头文件。

    4.3K30

    Redux 源码解析系列(一) -- Redux的实现思想

    但是这里还有一个问题,就是数据发生改变之后,我们都需要手动重新render一次APP,这时候就需要观察者模式,订阅数据的改变,然后自动调用renderAPP,所以我们的createStore功能又强大啦..., dispatch, subscribe} } 我们就可以这样使用 store.subscribe(() => renderApp(store.getState())) 由此可以看出,dispatch...所以就需要对reducer产生的前后appState进行一个对比,这就要求reducer必须是一个纯函数,返回的是一个新的object,不能直接更改reducer的参数,这样才能够对比可以通过对比前后的...state是否相等,来决定是否render // reducer用来管理状态变化 function reducer (state, action) { if(!...跟t his.props 来决定是否渲染 state = reducer(state, action) listeners.forEach((listener) => listener(

    70550

    Redux 源码解析系列(一) -- Redux的实现思想

    , dispatch, subscribe} } 我们就可以这样使用 store.subscribe(() => renderApp(store.getState())) 这样,我们的renderApp...,这样才能够对比可以通过对比前后的state是否相等,来决定是否re-render // reducer用来管理状态变化 function reducer (state, action) { if(...= () => state const dispatch = (action) => { // 可以看到 由于reducer返回的是一个新的object,那在外层,我们就可以对比nextProps...跟t his.props 来决定是否渲染 state = reducer(state, action) listeners.forEach((listener) => listener(...getState : 获取组件状态 dispatch :改变组件状态 subscribe : 订阅组件变化 4、如何使用redux 需要五个步骤 // 1、定一个 reducer, 负责管理数据变化还有初始化

    57810

    人人能读懂redux原理剖析_2023-02-23

    众所周知,Redux最早运用于React框架,是一个全局状态管理器。Redux解决了开发过程数据无限层层传递而引发的一系列问题,因此我们有必要来了解一下Redux到底是如何实现的?...我们着重看下dispatch,该方法是Redux流程的第一步,在用户界面通过执行dispatch,传入相对应的action对象参数,action是一个描述类型的对象,紧接着执行reducer,最后整体返回一个...Redux中间件其实是通过重写createStore来增强和扩展原来的dispatch方法,使其能够执行dispatch的同时可以同步执行其它方法,比如redux-thunk就是一个处理异步的中间件:..., initState={},applyMiddleWare(reduxThunk)) 我们会发现,中间件的使用方式是用applyMiddleWare把中间件作为参数传入createStore,那么applyMiddleWare...createStore // 判断值是否是对象类型 function isPlainObject(obj) { if(!

    63130

    人人能读懂redux原理剖析

    众所周知,Redux最早运用于React框架,是一个全局状态管理器。Redux解决了开发过程数据无限层层传递而引发的一系列问题,因此我们有必要来了解一下Redux到底是如何实现的?...我们着重看下dispatch,该方法是Redux流程的第一步,在用户界面通过执行dispatch,传入相对应的action对象参数,action是一个描述类型的对象,紧接着执行reducer,最后整体返回一个...Redux中间件其实是通过重写createStore来增强和扩展原来的dispatch方法,使其能够执行dispatch的同时可以同步执行其它方法,比如redux-thunk就是一个处理异步的中间件:..., initState={},applyMiddleWare(reduxThunk))复制代码我们会发现,中间件的使用方式是用applyMiddleWare把中间件作为参数传入createStore,...createStore// 判断值是否是对象类型function isPlainObject(obj) { if(!

    72230
    领券