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

为什么不在redux中使用Object.prototype.toString()来检查普通对象呢?

在Redux中,我们通常使用Object.prototype.toString()来检查普通对象是不可行的,原因如下:

  1. Redux的设计目标是实现可预测的状态管理,而不是为了处理对象类型的检查。Redux的核心概念是使用纯函数来处理状态的变化,通过action和reducer来管理状态的更新。因此,Redux并不关心对象的具体类型,而是关注状态的变化。
  2. Object.prototype.toString()是用来获取对象的类型信息的方法,它返回一个表示对象类型的字符串。然而,在Redux中,我们更关注对象的结构和内容,而不是具体的类型。使用Object.prototype.toString()来检查对象类型会导致代码变得复杂,而且不符合Redux的设计原则。
  3. Redux的状态更新是通过纯函数来实现的,这意味着我们应该避免在reducer中进行副作用操作,例如检查对象类型。使用Object.prototype.toString()来检查对象类型可能会引入副作用,导致状态更新不可预测。

相反,Redux提供了一种更简洁和可靠的方式来检查普通对象,即使用typeof操作符。通过typeof操作符,我们可以直接检查对象是否为"object"类型,而不需要使用Object.prototype.toString()。这种方式更加简单和高效,并且符合Redux的设计原则。

总结起来,不在Redux中使用Object.prototype.toString()来检查普通对象的原因是,Redux更关注对象的结构和内容,而不是具体的类型。使用typeof操作符可以更简洁和可靠地检查普通对象,而不引入副作用。

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

相关·内容

怎样通过读源码提高你的 JavaScript 知识

在这里学习的重点是:如果这些参数是函数,用于将第一个参数包装为 connect 的代理函数,isPlainObject 用于检查普通对象或 warning 模块,它揭示了如何将调试器设置为中断所有异常...看一看 connectHOC 的实现,我可以理解为什么它需要 connect 隐藏它的实现细节。它是 React-Redux 的核心,其中包含不需要通过 connect 公开的逻辑。...== 'object' || obj === null) return false 确保给定的参数是普通对象。...但是阅读下一行就会发现,当开发人员在使用 connect 返回 Date 对象的极不可能的事件,将由 Object.getPrototypeOf(obj)=== null 检查进行处理。...,例如检查源自 iFrame 的对象

92120

redux(应用的状态管理器)有那么难吗?没有!

Redux是什么? Redux其实很简单,总结起来就三句话: ✦ 将整个应用的state储存在唯一的store对象。...✦ state只能通过触发action修改,其中action就是一个描述性的普通对象。 ✦ 使用reducer描述action如何改变state。...前面提过,Redux的目的就是为了对应用数据进行集中管理,也就是state,而state是个普通对象。为了防止state被不小心更新,Redux创建了store对象,专门用来管理state数据。...那么,回到最初的话题,引入Redux到我们的应用,到底有什么好处?我们为什么需要一个专门的状态管理器? 为啥要使用redux? 早些时候,前端并没有这么复杂,几乎不怎么涉及数据管理。...✦ state只能通过触发action修改,其中action就是一个描述性的普通对象。 ✦ 使用reducer描述action如何改变state。

3.3K10

Redux异步解决方案之Redux-Thunk原理及源码解析

(increment()); }, 1000); 这样写同样可以在1秒后发出增加的action,而且代码还更简单,那我们为什么还要用Redux-Thunk,他存在的意义是什么?...如果你想用JS处理一个延时任务,直接用setTimeout就好了,即使你使用Redux也没啥区别。Redux确实提供了另一种处理异步任务的机制,但是你应该用它解决你很多重复代码的问题。...那在我们的组件怎么使用这个函数,我们当然可以这样写: // component.js showNotificationWithTimeout('You just logged in.')...然而这样使用岂不是更尬,还不如我们之前那个版本的!我们为啥要这么干?...如果你需要通过检查缓存判断是否发起API请求,这种方法就很好,但是将你整个APP的逻辑都构建在这个基础上并不是很好。

3.4K51

Redux 设计理念到源码分析

前言 Redux 也是我列在 THE LAST TIME 系列的一篇,由于现在正在着手探究关于我目前正在开发的业务状态管理的方案。所以,这里打算先从 Redux 中学习学习,从他的状态取取经。...为什么使用 Redux 如上所说,我们现在是状态驱动 UI,那么为什么需要 Redux 管理状态?react 本身就是 state drive view 不是。...总结 Redux 的东西远不止上面说的那么些。其实还有比如 middleware、actionCreator 等等等。其实都是使用过程的衍生品而已。我们主要是理解其思想。...if (nextListeners === currentListeners) { nextListeners = currentListeners.slice() } } 那么为什么...dispatch function dispatch(action: A) { // action必须是个普通对象 if (!

90830

第二十篇:从 Redux 中间件实现原理切入,理解“面向切面编程”

那如果想要在 Redux 引入异步数据流,该怎么办Redux 官方给出的建议是使用中间件增强 createStore。...这个过程单从表面上看,和普通 Redux 调用最大的不同就是 :dispatch 的入参从 action 对象变成了一个函数。...那么中间件又是如何“绕过” dispatch 的校验逻辑的?其实,“绕过”dispatch 只是咱们主观上的一个使用感受。...为什么我们的应用需要中间件?这里,我就以 Redux 中间件机制为例,简单和你聊聊中间件背后的“面向切面”编程思想。...怎么办?“面向切面”救场! 既然是面向“切面”,那么首先我们要搞清楚什么是“切面”。

29430

redux 中集成 angular di 机制

众所周知,angular是一个大而全的框架,想和redux一起使用,需要摒弃一些angular中常用的开发理念与模式,仅仅将它作为一个视图层框架使用,就和react一样,不在将类似domain state...那么我们如何来解决这个问题? 一种简单粗暴的方法就是,完全摒弃angular的di机制,使用外部的模块解决问题。比如发请求,难道我们非要使用$http服务吗?...明白了redux的中间件机制,那么上面的问题就好解决了,对于想在action中使用的通过angular di机制实例化的服务,我们没有必要在action实例化,我们完全可以仅仅在action声明,...是的,但是中间件它的确可以集成di功能,为什么,因为中间件的实例化逻辑是通过ng-redux在angular内部进行的,而中间件本身,有仅仅是一个函数而已,那么我们完全可以把中间件的实现,声明成一个...angular的factory或者service,之后在其中使用angular的di机制,动态的实例化action依赖服务的实例,关于这一点,在ng-redux的文档中有提及,但是没有说的特别的清楚

81330

【offer 收割计划】你知道为什么 reducer 最好是一个纯函数吗?

iterator 接口,也是无法使用 for ... of 遍历的 ✅ for ... of 不只是可以遍历元素的 value 值,你也可以通过下面这种方式遍历出对象的 key, value 值,但是这样会相对的麻烦一些...404 请求的网页不存在 500 服务器内部错误 503 服务不可用 六、redux 的 reducer 要求是一个纯函数?...首先如果 redux 的 reducer 如果不是一个 纯函数的话会造成什么后果?...,因此 hasChanged 返回 false ,state 没有被更新 那为什么 redux 要这样设计?...通过这几道面试题,我们复习了 JavaScript 的循环语句,也区分了 splice 和 slice 而又深入理解 redux reducer 的工作原理,这对我自己来说提升还是很大的,不知道看到这里的你有没有什么收获

98720

Redux从设计到源码

可以看到,在整个流程数据都是单向流动的,这种方式保证了流程的清晰。 为什么要用Redux? 前端复杂性的根本原因是大量无规律的交互和异步操作。...我们很容易就对这些状态何时发生、为什么发生以及怎么发生的失去控制。那么怎样才能让这些状态变化能被我们预先掌握,可以复制追踪? 这就是Redux设计的动机所在。...同时Redux更新的逻辑也不在Store执行而是放在Reducer。...我们总结下这里面的几个疑点。 Q1:为什么要嵌套函数?为何不在一层函数传递三个参数,而要在一层函数传递一个参数,一共传递三层?...Q2:middlewareAPI的dispatch为什么要用匿名函数包裹

1.4K60

应用connected-react-router和redux-thunk打通react路由孤立

store 并可以从中获得 2)可以使用 Redux 的 dispatch action 导航 3)集成 Redux 可以支持在 Redux devtools 中路由改变的时间履行调试集成的必要性:...我们添加如下配置: 使用ConnectedRouter包裹路由,并且将 store 创建的history对象引入,作为 props 传入应用 ConnectedRouter组件要作为Provider的子组件...跟同步操作一样,直接送出即可,那么如何送出第二个 Action ?...这里需要说明几点: fetchPosts返回了一个函数,而普通的 Action Creator 默认返回一个对象。...但是有一个问题,store.dispatch正常情况下,只能发送对象,而我们要发送函数,为了让store.dispatch可以发送函数,我们使用中间件——redux-thunk。

2.3K00

JavaScript的类型判断

这就能解释为什么下面这种写法也是可行的: console.log(typeof'yayu')// string引用《JavaScript权威指南》对 typeof 的介绍: typeof 是一元操作符...正是因为这种特性,我们可以用 Object.prototype.toString 方法识别出更多类型! 那到底能识别多少种类型? 至少 12 种! 你咋知道的? 我数的!...而且 Function 对象覆盖了从 Object 继承Object.prototype.toString 方法。函数的 toString 方法会返回一个表示函数源代码的字符串。...EmptyObject jQuery提供了 isEmptyObject 方法判断是否是空对象,代码简单,我们直接看源码: function isEmptyObject( obj ) {...所以是不是为了放过空的 arguments 时也放过了一些存在争议的对象? 第三个条件:length 是数字,并且 length > 0 且最后一个元素存在。 为什么仅仅要求最后一个元素存在

1.2K30

Rematch: Redux 的重新设计

Redux 的受欢迎程度是否值得我们去使用为什么或者为什么不值得? 我们能否制定更好状态管理解决方案吗?如果能,要怎么做?...然后,库可以使用提供者/消费者模式连接以保持同步。 也许最流行的状态管理库是Redux。在过去的两年里,它变得越来越受欢迎。那么为什么这么喜欢一个简单的库Redux 更具性能?答案是否定的。...为什么使用 Redux 在表层之下,Redux 与 TJ 的根对象{}完全相同——只是包装在了一系列实用工具的管道(pipeline)。 在 Redux ,不能直接修改状态。...和使用一个全局对象相比,Redux 确实简化了开发过程。 将 Redux 视为一个带有更新前/更新后钩子的全局对象,以及能够以简单的方式合成新状态。 Redux 是不是太复杂了? 是的。...我们一步一步来看: 你派发一个action(dispatch an action),它实际上是一个函数而不是预期的对象。 thunk 中间件检查每个动作,看看它是否是一个函数。

1.5K50

2023前端二面必会react面试题合集_2023-02-28

扩展一下,如果是根据用权限判断是否隐藏组件该怎么做?...如果使用 ES6 的方式创建组件,那么 React mixins 的特性将不能被使用了。 React的事件和普通的HTML事件有什么不同?...即没有任何包含关系的组件,包括兄弟组件以及不在同一个父级的非兄弟组件。...为什么 useState 要使用数组而不是对象 useState 的用法: const [count, setCount] = useState(0) 可以看到 useState 返回的是一个数组,那么为什么是返回数组而不是返回对象...EMAScript5版本,用 propTypes定义属性的约束。 EMAScript6版本,为组件定义 propsTypes静态属性,对属性进行约束。 (5)使用混合对象、混合类的方法不同。

1.5K30

9种数据类型,数据类型区别及判断数据类型方法

Symbol: 唯一性,用作对象的属性 vuex或redux,派发 Symbol() == Symbol() false 深层知识,可以自行查询Symbol上的方法 BigInt: Number数据类型...,最大能处理的是2^53,即Number.MAX_SAFE_INTEGER得到9007199254740991,超过这个值,计算就不准确了 而bigint的出现就是解决超过这个范围的值,9007199254740991n...,占据空间⼩、⼤⼩固定,属于被频 繁使⽤数据,所以放⼊栈存储;     引⽤数据类型存储在堆( heap )对象,占据空间⼤、⼤⼩不固定,如果存储在栈,将会 影响程序运⾏的性能;引⽤数据类型在栈存储了指针...,当以000开头,便会视为是object类型,而null刚好是000,所以这也是为什么null是object类型 判断引用类型数据不准确,像Date,regex都会视为object instanceof...,建议封装使用) 标准的检测数据类型的方法,Object.prototype.toString不是转化字符串,是返回当前实例所属类的信息 数据类型转换 Number(): - 将数据转化为number

28210

关于前端面试你需要知道的知识点

扩展一下,如果是根据用权限判断是否隐藏组件该怎么做?...React Hooks 的限制主要有两条: 不要在循环、条件或嵌套函数调用 Hook; 在 React 的函数组件调用 Hook。 那为什么会有这样的限制?...那为什么不要在循环、条件或嵌套函数调用 Hook ?因为 Hooks 的设计是基于数组实现。在调用时按顺序加入数组,如果使用循环、条件或嵌套函数很有可能导致数组取值错位,执行错误的 Hook。...即没有任何包含关系的组件,包括兄弟组件以及不在同一个父级的非兄弟组件。...Redux 请求中间件如何处理并发 使用redux-Saga redux-saga是一个管理redux应用异步操作的中间件,用于代替 redux-thunk 的。

5.4K30

使用Redux前你需要知道关于React的8件事

,通常情况下你不需要Redux这样的状态管理库.学习React之路一书中演示了如何使用普通的React构建应用程序,而不需要用到Redux这样的外部依赖.....之后就可以通过this.setState()方法更新状态.状态对象(state object)的更新过程是一次浅合并.因此你可以只更新本地状态特定的某一部分状态,而其余的状态都不会受到影响.一旦状态更新完...,就可以使用传入函数给this.setState()而非对象....所以为什么你应该要了解Context?...在深入Redux之前,理解这种模式背后的原理是很有意义的.当你使用状态管理的工具库时,你会把组件和State连接起来.那些组件并不在意应该怎么去展示内容,而更多是描述如何起效的.因此那些组件就是容器组件

1.2K80
领券