问题标签 [react-router-redux]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2415 浏览

javascript - 如何为 react-router-redux 触发 LOCATION_CHANGE 事件?

根据文档,我应该能够LOCATION_CHANGE通过调用来触发事件push('/with/the/path')。来自文档的示例:

但是,这看起来像当我调用 push 时我得到了这个(看起来它没有做任何事情):

在此处输入图像描述

我错过了什么?

0 投票
1 回答
55 浏览

redux - Redux 中的 Middlware 到底是什么?

好的,所以我很难理解 redux 中的中间件和 applyMiddleware 以及 react-router-redux 中的 routerMiddleware。有人可以用简单的术语向我解释它到底是什么。谢谢你。

0 投票
2 回答
1154 浏览

reactjs - 如何使用 redux 从路由参数加载对象

我正在使用 react-router-redux 并且我有这样的路线

在路由中加载与 userId 参数对应的用户对象的推荐方法是什么?

我的想法(我是 react 和 redux 的新手)是在 UserMaintenancecomponentWillReceiveProps方法中使用 userId 参数并将一个FETCH_USER操作发送到将加载到state.currentUser. 当 currentUser 参数因操作而更新时,UserMaintenance 组件将随之更新。

0 投票
2 回答
5044 浏览

reactjs - 如何使用 React + Redux 水合服务器端参数

我有一个使用 Redux 和 React Router 的通用 React 应用程序。我的一些路由包含在客户端上将触发 AJAX 请求以混合数据以供显示的参数。在服务器上,这些请求可以同步完成,并在第一个请求时呈现。

我遇到的问题是:当在componentWillMount路由组件上调用任何生命周期方法(例如 )时,调度将在第一次渲染中反映的 Redux 操作已经太晚了。

这是我的服务器端渲染代码的简化视图:

路由.js

服务器.js

FooViewContainer组件在服务器上构建时,它的第一次渲染的 props 将已经固定。我发送到商店的任何操作都不会反映在第一次调用 中render(),这意味着它们不会反映在页面请求上传递的内容中。

React Router 传递的id参数本身对第一次渲染没有用。我需要同步将该值水合为适当的对象。我应该把这种保湿剂放在哪里?

一种解决方案是将它内联地放在render()方法内部,例如在服务器上调用它。这对我来说显然是不正确的,因为 1)它在语义上没有意义,以及 2)它收集的任何数据都不会正确地发送到商店。

我见过的另一种解决方案是向fetchData路由器链中的每个容器组件添加一个静态方法。例如这样的:

FooViewContainer.js

服务器.js

我觉得必须有比这更好的方法。它不仅看起来相当不优雅(是.WrappedComponent一个可靠的接口吗?),而且它也不适用于高阶组件。如果任何路由组件类被除此之外的任何东西包装,connect()则将停止工作。

我在这里想念什么?

0 投票
1 回答
286 浏览

reactjs - 在转换之间保存和恢复状态的最佳方式

我正在尝试使用向后和向前功能实现分页,但问题是如何保持转换之间的状态并恢复导航?

我试图通过以下方式使用 react-router 来实现这一点:

搜索结果组件

然后在减速器中:

}

问题是,当 SearchResult 组件启动时,来自服务器的数据尚不可用,因此空数组存储为当前位置的状态。

提前感谢您提供任何解决方法的想法。

0 投票
1 回答
337 浏览

react-router - react-router root onChange 替换路径无限

似乎如果我在 root onEnter 或 onChange 钩子中更改路径,则 url 将无限更改。但是,如果我更改子路线中的路径,它将起作用。实际上我想在一个地方处理身份验证,否则每个子路由都应该处理相同的逻辑。

0 投票
0 回答
197 浏览

react-router - react-router root onChange钩子替换url导致无限循环

似乎如果我更改 root onEnter 或 onChange 钩子中的路径,则 url 将无限更改(?_k=u9huwr 将始终更改)。但是,如果我更改子路线中的路径,它将起作用。实际上我想在一个地方处理身份验证,否则每个子路由都应该处理相同的逻辑。

0 投票
1 回答
244 浏览

javascript - Pinterest Product Hunt 风格模式和路由的策略

(我使用的是最新版本的 React、React-RouterReact-Aria-Modal

我正在尝试创建类似于 Pinterest 或 Product Hunt 上的路由行为。对于那些不熟悉的人来说,它归结为在预览模式下拥有一个事物的提要(图钉、产品等)。单击该预览中的名称或某些“查看更多”链接,以模式打开事物并相应地更改路线。如果我要复制粘贴该 URL,或刷新页面,Thing 现在会像页面一样呈现。

因此,在“查看更多”Link组件上,我设置了状态(视图 = 模态)并在Thing组件中查看是否在模态中呈现。

所以,本质上:

在 aThing中,它大致如下所示:

我遇到了一个问题,现在页面背景在单击链接时消失,而模式确实出现了。我想这是由于通过单击链接进行的导航。

React-Router 有一个这样的例子可以解决这个问题,但也有一些问题。它们似乎本质上将先前的子级存储在App关卡中,并在请求的模态/路由之外进行渲染 - 本质上导致重新渲染整个提要,感觉既不高效也不干净。

此外,如果要设置“下一个/上一个”样式交互,似乎每次通过单击“下一个/上一个”更新路由器状态时都会加载整个背景,这也感觉没有必要。

所以,我想知道如何最好地考虑设置它 - 以便前一页仍然显示在后台并且路线也会更新。

任何想法将不胜感激!

0 投票
2 回答
5584 浏览

reactjs - 使用 React Redux 更新路由更改的状态

我正在使用 React + Redux,想知道如何正确更新状态。

可以使用选项卡单击这些路线(此处显示一个示例):

在我的 displayQuestions 渲染方法中,我做了一个检查

因此,当用户导航到页面时,在我的 componentDidMount() 中,我使用了一个操作方法 this.props.fetchQuestions,然后它向我的后端发出异步请求,通过减速器,然后进入上面的渲染方法。在 renderQuestions 函数中,在 renderQuestions 中,我只是从 this.props.questions 中获取问题。

但是,按照我配置路由的方式,componentDidMount 只发生一次。例如,如果我在英语选项卡上选择,我会得到 componentDidMount,但如果我然后单击数学或科学,则 url 会更改,但不会再次调用 componentDidMount。

如果我点击一个使用不同组件(如 userProfile)的按钮,那么一切都会按预期重新呈现。但我认为,由于我在每个问题/主题路径中使用相同的组件,因此不会再次调用 componentDidMount。

那么如何更新 url 更改的状态呢?什么是 React + Redux 方式?请不要使用反模式。

编辑:

现在,我得出了这个答案:

这将停止否则会发生的无限循环。但必须有更好的方法。

0 投票
1 回答
998 浏览

reactjs - 无法通过 Redux 中的 createStore 传递初始状态

我正在尝试在 createStore 中传递初始状态,但它在控制台中显示错误/警告。

Unexpected key "blogList" found in initialState argument passed to createStore. Expected to find one of the known reducer keys instead: "routing". Unexpected keys will be ignored.

除了这个错误,我没有获得存储状态的初始数据。来自文档:

[initialState] (any):初始状态。您可以选择指定它以在通用应用程序中混合来自服务器的状态,或恢复以前序列化的用户会话。如果您使用 combineReducers 生成 reducer,则这必须是一个普通对象,其形状与传递给它的键的形状相同。否则,您可以自由传递您的减速器可以理解的任何内容。

我有什么遗漏吗?我现在只是记录状态。它现在没有发生。我在这里参考了这些视频来学习 redux。

这是我的商店代码:

根减速器:

博客列表减速器:

PS:我正在使用 React Router 和 redux。我可以从反应开发工具中看到 store.getState 中的路由。