当前位置: 首页 > 知识库问答 >
问题:

更改url参数时反应路由器不重新加载组件

邓夕
2023-03-14

我知道这不是react router的默认行为/功能,可以帮助我们轻松地重新加载当前组件,但我真的需要在我的应用程序中使用它。

我的应用程序处理产品。我有一个可以加载的产品列表,当我单击某个项目时,它会显示相关的产品详细信息。

在该页面上,我有加载相同组件的相关产品链接,但有另一个产品详细信息,位于

<Route path="/products/:id/details" component={ProductDetail} />

我在我的组件willmount中获取数据,似乎如果我只更改URL,就不会装载新组件,因此,我总是显示我的旧数据,而不获取任何内容。

作为一名使用React的初学者,我正在寻找一些帮助或技巧来重新加载该页面所涉及的组件。我的意思是能够用好的产品重新加载ProductDetail。

我试着用组件WillUpdate四处看看(一种我可以看到路由器URI变化的方法:D),但我无法在其中设置状态以使我的组件重新加载(这似乎根本不是一个好的做法)

知道我该怎么做吗?

编辑:根据第一个答案,我必须使用onEnter。我现在一直在努力将状态/道具传递给相关组件:

const onEnterMethod = () => {
    return fetch(URL)
        .then(res => res.json())
        .then(cmp => {
            if (cmp.length === 1) {
             // How to pass state / props to the next component ?
            }
        });
};

共有1个答案

亢雅懿
2023-03-14

处理它的方法取决于您是使用通量、还原还是以您想要的方式管理您的操作。最重要的是,我会尝试使用Route组件的onChange属性(请查看React路由器文档):

    <Route path="/products/:id/details" component={ProductDetail} onChange={someMethod} />

然后,如果您使用的是redux或无论如何是在通量中完成的,请在某个方法中创建操作。redux将是:

    <Route path="/products/:id/details" component={ProductDetail} onEnter={onEnterHandler(store)} />

以及带有redux存储的onIntHandler:

    function onEnterHandler(store) {
      return (nextState, replace) => {
        store.dispatch({
          type: "CHANGEPRODUCT",
          payload: nextState.params.id
        })
      };
    }

然后在ProductDetail组件中打印新信息(需要在redux和redux sagas库中进行更多的学习才能完成这一部分)。

请记住,React只是视图部分,尝试仅使用React解决所有这些问题不仅是不推荐的,而且会弄乱您的代码。

 类似资料:
  • 我正在使用React-Router开发一个react应用程序。我有一个项目页面,其url如下: 当项目组件加载时,我从componentDidMount事件触发该项目的数据请求。我现在遇到了一个问题,如果我直接在两个项目之间切换,那么只有id像这样更改... componentDidMount不会再次触发,因此不会刷新数据。是否有另一个生命周期事件我应该用来触发我的数据请求或一个不同的策略来解决这

  • 有没有可能--在中也这样做? 我为什么需要这个?让我用一个例子来解释: 创建新类别的路由是,在保存时显示,并且要将路由(23-是新项的id存储在数据库中)

  • 问题内容: 当前,我们的项目正在使用default ,而我正在使用此“ hack”来进行更改,而无需重新加载页面: 和在 我想到的替换用筑巢路线,但无法找到这。 有可能吗? 我为什么需要这个?让我用一个例子来解释: 创建新类别的路线是在SAVE 之后显示的,我想将路线更改为(23-是存储在db中的新项目的id) 问题答案: 只需使用即可代替 。内部调用,但会自动将选项设置为。您可以呼叫和设置。例如

  • 问题内容: 我正在使用react-router开发一个React应用程序。我有一个项目页面,其URL如下: 当项目组件加载时,我从componentDidMount事件触发了对该项目的数据请求。我现在遇到一个问题,如果我直接在两个项目之间切换,那么只有id会这样改变… componentDidMount不会再次触发,因此不会刷新数据。我是否应该使用另一个生命周期事件来触发我的数据请求,或者使用其他

  • 我有一个组件,它显示了可以使用url查询参数过滤的项目列表,这些项目从api分页,如果设置了过滤器,我需要再次调用第一个页面,这个第一次调用是在路由器的解析器中,所以我需要的是路由器以相同的方式重新加载,就像我来自其他URL一样。 app.routes.ts app.resolver.ts app.component.ts app.service.ts 其他.ts组件

  • 我使用的是react-router-dom version4.3.1,单击链接后,URL会发生变化,但不会呈现React组件(事实上,调试器不会在代码中的任何位置停止)。我已经尝试使用和关键字,但这并不起作用。在以下两种解决方案中提到了它:React router更改url,但不查看;React route使用browserhistory更改url,但什么也不发生;它唯一起作用的时候是使用refr