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

React redux -将参数传递给url - error - Actions必须是纯对象

在使用React Redux时,如果你遇到“Actions必须是纯对象”的错误,这通常是因为你在创建action时没有遵循Redux的规范。在Redux中,actions是描述发生了什么的对象,它们必须满足以下条件:

  1. 纯函数:action创建函数(通常称为action creators)应该是一个纯函数,这意味着相同的输入总是产生相同的输出,而且它不应该有任何副作用,比如修改传入的参数或执行异步操作。
  2. 纯对象:action本身应该是一个普通的JavaScript对象,它必须有一个type属性,通常还会包含其他描述事件的属性。

如果你尝试直接传递参数给URL并遇到了这个错误,可能是因为你在action creator中做了不恰当的操作。下面是一个正确的action创建函数的例子:

代码语言:txt
复制
// 正确的action creator示例
function addItem(item) {
  return {
    type: 'ADD_ITEM',
    payload: item
  };
}

如果你需要将参数传递给URL,通常是在组件中使用react-router来处理路由跳转。这里有一个如何结合Redux和react-router来导航到新URL的例子:

代码语言:txt
复制
import { useDispatch } from 'react-redux';
import { useHistory } from 'react-router-dom';

function MyComponent() {
  const dispatch = useDispatch();
  const history = useHistory();

  const handleClick = () => {
    // 假设我们要添加一个item并导航到新页面
    const newItem = { id: 1, name: 'New Item' };
    dispatch(addItem(newItem));
    history.push(`/items/${newItem.id}`);
  };

  return (
    <button onClick={handleClick}>Add Item and Navigate</button>
  );
}

在这个例子中,handleClick函数首先分发一个action来更新Redux store,然后使用history.push方法来改变URL并导航到新页面。

如果你遇到的问题是在尝试将参数嵌入到action对象中时发生的,确保你没有在action creator中执行任何非纯的操作,比如调用API或修改全局状态。

参考链接:

如果你遵循了上述建议但仍然遇到问题,请确保你的Redux中间件配置正确,特别是如果你使用了像redux-thunkredux-saga这样的中间件来处理异步操作。

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

相关·内容

React】211- 2019 React Redux 完全指南

必须从某处开始,对吧? 惯用的方式定义一个 initialState 变量然后使用 ES6 默认参数给 state 赋初始值。...我们准备好把它连接到 React 了,在此之前让我们先谈谈这段 reducer 代码。 如何保持 Reducers 另一个关于 reducers 的规则是它们必须函数。...也就是说不能修改它们的参数,也不能有副作用(side effect)。 Reducer 规则二:Reducers 必须函数。 “副作用(side effect)”指对函数作用域之外的任何更改。...Reducer 函数必须”的 —— 不能修改它的参数,也不能有副作用(side effect)。...如果你实质上复制参数(state)给一个跟 state 相同的对象,这有什么意义呢? 在很小的例子中,可能会全部 state,但通常你只会从更大的 state 集合中选择部分组件需要的数据。

4.2K20

redux架构基础

这个唯一Store上的状态,一个树形的对象,每个组件往往只是用树形对象上一部分的数据,而如何设计Store上状态的结构,就是Redux应用的核心问题。...函数函数式编程的概念,必须遵守以下一些约束。...终极解决方案:react-redux 首先是安装react-redux: npm i react-redux -S redux实现两个重要的功能: •connect:链接容器组件和傻瓜组件。...和mapDispatchToProps(当无计算时,为非必),执行结果依然一个函数,所以才可以在后面又加一个圆括号,把connect函数执行的结果立刻执行,这一次参数Counter这个傻瓜组件。...Flux框架的一个巨大改进,Redux强调单一数据源、保持状态只读和数据改变只能通过函数完成的基本原则,和React的UI=render(state)思想完全契合。

1.2K10
  • 俺好像看懂了公司前端代码

    而在Redux中主要有Reducer和Action,Reducer一个函数,根据不同的Action返回不同的状态,Action则是用于改变状态唯一途径。...上述所说的入口文件index.js用来装饰每一个controller,装饰的内容就是遍历controller文件的actions对象,生成actions函数和reducers函数。...最后生成的reducers交给redux管理,actions则为组件提供调用。actions函数里面有三步,包括请求前,请求中和请求后对状态的处理。...我们这里需要自己封装一个高阶组件,里面调用react-redux提供的connect函数state和dispatch映射到组件的props,此外还需要定义两个函数映射到props中,一个用于调用接口的函数...mapDispatchToProps想要指定映射哪些数据到props中,可以不

    1.3K10

    你要的 React 面试知识点,都在这了

    函数始终接受一个或多个参数并计算参数并返回数据或函数的函数。...如果使用非函数,它没有参数,直接更改 student 对象来更改全局状态。 使用函数,它接受参数,基于参数计算,返回一个新对象而不修改参数。...中,我们功能划分为小型可重用的函数,我们必须将所有这些可重用的函数放在一起,最终使其成为产品。...高阶组件 高阶组件组件作为参数并生成另一个组件的组件。 Redux connect高阶组件的示例。 这是一种用于生成可重用组件的强大技术。...因为我们javascript对象递给style属性,所以我们可以在组件中定义一个style对象并使用它。

    18.5K20

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

    前我们dispatch的action必须一个对象(plain object),使用了Redux-Thunk后,dispatch可以支持函数,这个函数会传入dispatch本身作为参数。...这两个的用法不一样的,你需要小心的不要错了参数,也不要混淆了他们。...,React Thunk会自己dispatch作为参数进去。...而且他会将这些函数action“吃了”,所以不用担心你的reducer会接收到奇怪的函数参数。你的reducer只会接收到对象action,无论直接发出的还是前面那些异步函数发出的。...我之前就告诉过你:只要使用了Redux Thunk,如果你想dispatch一个函数,而不是一个对象,这个中间件会自己帮你调用这个函数,而且会将dispatch作为第一个参数进去。

    3.5K51

    深入浅出redux知识

    此函数第一个参数 state 状态,第二个参数 action 动作,action 参数对象对象里面有一个不为 undefined 的 type 属性,就是根据这个属性去区分各种动作类型。...npm install react-redux 这个库连接库,用来和reactredux进行关联的,上面使用redux的时候发现一个痛点就是要订阅设置状态的方法还要取消订阅,而react-redux...,第一个参数状态映射为属性,第二个action映射为属性,第二次需要传入组件作为参数。...mapStateToProps 该参数个函数返回对象的形式,参数store中的 state,可以用来筛选我们需要的属性,防止组件属性太多,难以维护 比如我们状态这样的{ a: 1, b: 2 }...中的方法映射为属性,参数个函数返回对象的形式,参数store中的 dispatch,可以用来筛选action let actions = { increment() { return {

    99360

    dva框架-快速了解

    . dva 首先是一个基于 reduxredux-saga 的数据流方案,然后为了简化开发体验,dva 还额外内置了 react-router 和 fetch,所以也可以理解为一个轻量级的应用框架...,如果有异步,必须借助effect effects:副作用(业务逻辑,包含同步和异步) 这里的键名,就是action中type的字段 payload: action参数,都放在这里...call() : 表示调用异步函数 如果yield call的一个Promise对象,那只有在Promise返回的resolve方法的情况下,下面跟着的yield...= new Error(response.statusText); error.response = response; throw error; } /** * Requests a URL...Start app.start('#root'); 0 9 routes文件夹,类似pages 和react 组件的写法一样,对于model中的状态使用,也使用connect方法,与redux的使用方法相似

    1.7K10

    React进阶(1)-理解Redux

    ,单纯使用原始的数据传递方式 那么组件之间的值会变得非常复杂,如果要做一个大型的应用,那么就需要在React的基础上配置一个数据层的框架进行结合的使用 如果改为右边的Redux处理方式,红色圆圈组件的状态数据放到一个...,就要改变组件的应用状态,但时改变组件状态的方法不是直接去修改状态上的值,而是创建一个新的状态对象返回给Redux,由Redux完成新的状态的组装 组件数据的改变只能通过函数完成 所谓的函数,就是指...函数接收四个参数,第一个参数上一次调用返回的结果,第二个参数当前被处理的元素的值,第三个当前元素在数组中的索引,第四个调用的原数组 这个reduce的方法接收一个函数作为累加器,reduce 为数组中的每一个元素依次执行回调函数...而在Redux中,每个reducer函数如下所示 reducer(state, action) 其中reducer函数的第一个参数state指当前的状态值,而第二个参数action接收到的action...必须函数,换句话说,reducer函数的返回结果必须完全由参数state和action决定,而且不产生任何的副作用,也不能修改参数state和action对象 如下一个典型的reducer示例,reducer

    1.4K22

    React进阶(1)-理解Redux

    的状态,必须要通过派发(dispatch)一个action对象去完成 然后组件渲染的对应的界面要更改的话,实际更改的就是组件的状态,如果状态都是只能读不能修改的话,那么界面就不会更新变化了 想要更改用户界面的渲染...,就要改变组件的应用状态,但时改变组件状态的方法不是直接去修改状态上的值,而是创建一个新的状态对象返回给Redux,由Redux完成新的状态的组装 组件数据的改变只能通过函数完成 所谓的函数,就是指...函数接收四个参数,第一个参数上一次调用返回的结果,第二个参数当前被处理的元素的值,第三个当前元素在数组中的索引,第四个调用的原数组 这个reduce的方法接收一个函数作为累加器,reduce 为数组中的每一个元素依次执行回调函数...而在Redux中,每个reducer函数如下所示 reducer(state, action) 其中reducer函数的第一个参数state指当前的状态值,而第二个参数action接收到的action...必须函数,换句话说,reducer函数的返回结果必须完全由参数state和action决定,而且不产生任何的副作用,也不能修改参数state和action对象 如下一个典型的reducer示例,reducer

    1.2K20

    深入学习和理解 Redux

    常见的组件通信方式有以下几种: 父子组件:props、state/callback回调来进行通信 单页面应用:路由值 全局事件比如EventEmitter监听回调react中跨层级组件数据传递Context...首先得从Reducer说起,之前 Redux三大原则里面提到了reducer必须函数,下面给出函数的定义: 对于同一参数,返回同一结果 结果完全取决于传入的参数 不产生任何副作用 至于为什么reducer...必须函数,可以从以下几点说起?...因为 Redux 一个可预测的状态管理器,函数更便于 Redux进行调试,能更方便的跟踪定位到问题,提高开发效率。 Redux 只通过比较新旧对象的地址来比较两个对象是否相同,也就是通过浅比较。...最佳的办法 Redux返回一个新对象,新旧对象通过浅比较,这也是 Reducer函数的重要原因。

    86120

    Redux(四):源码分析之createStore

    如果使用了combineReducers()函数来创建根reducer,那么这个值必须一个对象,且和combineReducers()函数的参数对象拥有相同key。...,通常这个action一个包含type属性的对象。...通过中间件的拓展,action可以是promise、函数,但最终传递给底层的依然对象。 195行处可以看到执行reducer来计算得出新的currentState并覆盖之前的值。...isPlainObject:对象检查函数。 对象(Plain Object)指 的通过字面量形式或者new Object()形式定义的对象。...new Date()); console.log(typeof new RegExp()); js基于原型链的,对象的原型一个特殊对象,这个特殊对象没有原型的,处于最顶层: ({}).

    1.2K50

    Redux助力美团点评前端进阶之路

    本次分享主要介绍美团点评以React+Nodejs全栈开发为背景,对redux的模块化尝试与思考。 ?...作为前端工程师,怎样把数据传递给用户,并把用户的想法意图转化为数据,这是我们要解决的本质问题。 人脑无法直接读懂数据的,于是我们有了UI,UI成为了人与数据之间的桥梁。...React强势把应用拆分成组件树,每个组件内的数据由state和props构成。Props由父组件进来,state则是内部维护的一个本地状态。...这是一个函数,意味着输入一个确定的参数Props,它就会输出一个确定的view。只要输入的Props不变,那么输出的view就一定不会改变。 ? React+Redux数据流 ?...action通过reducer来修改state,reducer必须函数。 时间旅行 我们只要拿到最初始的state和用户会话中触发的所有action,我们就能一一还原出本次会话的所有空间状态。

    1.5K40

    理解 React 中的 Redux-Thunk

    Redux Thunk 一个中间件,它允许 Redux 返回函数而不是 actions。这就允许你在延迟处理 actions 的时候结合 promises 使用。...请注意,Reducer 一个函数;因此它不能用于处理 API 调用。它不应该造成副作用,也不应该直接改变 state。 在 React 中,你不应该直接更改 state。...action 对象应该被返回,因为 action 一个对象Redux-thunk 允许一个 action creator 返回一个函数!现在,我们可以做任何异步工作。...: 第一个参数 reducer - 必填 第二个参数 state 初始值 - 可选 第三个参数中间件 - 可选 由于嵌套函数的特定语法,createStore 函数会根据参数的类型自动确定传递的参数中间件...当一个 action 一个函数,它会被调用,否则它会被传递给下一个中间件或者 Redux 本身。

    49420

    react基础--2

    react-redux react-redux需要配合 redux使用,react-redux可实现 reduxreact的连接 但需遵循如下规范: 1.所有UI组件都应该包裹一个容器组件,他们父子关系...需要给connect函数传递两个参数 第一个参数给ui组件的状态,第二个参数给ui组件的操作状态的方法 但这两个参数必须函数,通过函数的返回值给到ui组件 如下 // 引入 ui 组件 import...) // count_action.js export const createIncrementAction = data => {type:'incremnt', data}; 可以看到 第二个参数我们直接了一个对象...中的reducer函数必须一个函数 也就是必须遵循 1.不得改写参数数据 2.不会产生任何副作用如网络请求 3.不能调用 Data.now()或者Math.random()等不纯方法 所以reducer...不能使用 一些数组方法如 unshift,push直接对原参数进行修改 不是函数会影响redux对状态的改变 这样会造成数据不响应,不会更新到视图

    1.2K20

    React中的Redux

    react-redux.png 其中红色虚线部分为redux的内部集成,不能显示的看到。 action:事件,它本质上JavaScript的普通对象,它描述的“发生了什么”。...reducer一个监听器,只有它可以改变状态。一个函数,它不能修改state,所以必须生成一个新的state。在default情况下,必须但会旧的state。...在我们的HelloApp应用中,我们helloAppReducer 导入,并传递给createStore() 。...Hello App源码 开始之前我们需要清楚实际上ReduxReact之间并没有关系。Redux支持React、Angular、Ember、jQuery甚至JavaScript。...state 数据修改 从props中调用回调函数 向Redux派发actions 调用方式 手动 通常由React Redux生成 大部分的组件都应该是展示型的,但一般需要少数的几个容器组件把它们和

    4K20

    Redux

    基础 Action ​ Action把数据从应用传到store的有效载荷。它是state数据的唯一来源。一般通过store.dispatch()action传到store。...Action本质上JavaScript普通对象。action内必须有一个字符串类型的type字段来表示将要执行的动作。多数情况下type会被定义成字符串常量。...4、Redux store保存了根reducer返回的完整state树。 搭配ReactRedux支持React、Angular、Ember、JQuery甚至JavaScript。...安装React-Redux: npm install --save react-reduxReduxReact绑定库基于容器组件和展示组件相分离的开发思想,这个思想非常重要。...向Redux派发actions 调用方式 手动 通常由React Redux生成 ​ 大部分的组件都应该是展示型的,但一般需要少数的几个容器组件把它们和Redux store连接起来。 ​

    1.7K20
    领券