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 (这里是 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>;它将被忽略的主要内容,如果未能解决你的问题,请参考以下文章
useEffect TypeScript 错误中的 Redux 操作?