Redux 中的调度操作给出错误'[react-router] You cannot change <Router routes>;它将被忽略

Posted

技术标签:

【中文标题】Redux 中的调度操作给出错误\'[react-router] You cannot change <Router routes>;它将被忽略【英文标题】:Dispatching action in redux gives error '[react-router] You cannot change <Router routes>; it will be ignoredRedux 中的调度操作给出错误'[react-router] You cannot change <Router routes>;它将被忽略 【发布时间】:2016-07-26 15:22:10 【问题描述】:

我在我的应用程序中使用 reactjs、react-router 和 redux。我正在使用异步操作,以下是我的 action.js 代码

  signUser(state,user) 
    return function (dispatch)
      return dispatch(requestSignUp());
    
  


export default function requestSignUp()
 return 
   type: Actions.REQUEST,
   signUserReducer:
    action: Actions.REQUEST
   
  
 

以下是我的 store.js 代码

const reducer = combineReducers(reducers);
let finalState = compose(applyMiddleware(thunk, logger()))(createStore)

export default function configureStore(initialState) 
  return finalState(reducer, initialState);

以下是我的 reducer.js 代码

export default function signUserReducer(state = initialState, action) 

if (typeof state == 'undefined') 
    return state;


switch (action.type) 

    case Actions.REQUEST:
        return Object.assign(, state, 
            action: action.signUserReducer.action
        );
    default:
        return state;


现在,每当我发送一个操作时,我的浏览器控制台上都会显示一个错误提示

警告:[react-router] 你不能改变'Router routes';会被忽略

我尝试使用“react-router-redux”解决这个问题,但没有解决。

【问题讨论】:

您可以发布您定义路线的代码部分吗?问题很可能就在那里。 @AbhishekJain: render() const store, history = this.props return ( ) @AbhishekJain 我已经实现了 react-redux-router 但是每当我通过操作调度它时仍然会给出相同的错误 ***.com/questions/34760825/… 看看这是否有帮助。这是 react-router 的常见问题。 @AbhishekJain:如何将道具传递给这个恒定的路线.. 【参考方案1】:

这里是 Redux 创建者的回答,他在github 留下的,我觉得很有道理

最好的第一步是再次查看错误消息。它的 不是随机错误;它实际上告诉了发生了什么。它说 Router 组件不能接受 routes 属性的新值。这意味着 每次渲染根时,您都在重新创建新路线 组件,而不是在应用程序的整个生命周期中创建一次, 这是 React Router 打算支持的场景。结论 您是否需要查看渲染路由器组件的位置, 并确保您不会在每次渲染时都创建路由

【讨论】:

那么我们如何解决这个问题:/ @JamieHutber 使 const routes 在渲染之外保持不变,并包括 routes,参见上面的 cmets 感谢您回到我身边:D 奇怪的是我已经这样做了,它一定是我设置的其他方式。我会继续挖掘 是的,这对我的应用程序有帮助,@DennisDecoene 如果您需要帮助,请分享您的代码 @vitr,我已经打开了另一个问题,与此相关,带有代码链接,请参阅***.com/questions/38995841/…

以上是关于Redux 中的调度操作给出错误'[react-router] You cannot change <Router routes>;它将被忽略的主要内容,如果未能解决你的问题,请参考以下文章

调度操作并从同一组件中的 redux 获取状态的最佳实践?

useEffect TypeScript 错误中的 Redux 操作?

调度 @ngrx/router-store 操作时出现 Redux devtools 扩展错误

使用 Redux Toolkit 的调度操作需要两个参数

使用 React 本机导航调度 redux 时注销错误

Redux thunk - 错误 · 动作必须是普通对象。使用自定义中间件进行异步操作,即使调度具有键类型的对象