重定向时重新初始化类

2024-05-23

我目前在http://example.com/parentdir/module/2/

此 URL 实际上加载 Module.js 类,如以下路由所示:

<Route exact path={"/parentdir/module/:id"} component={Module} />

这包含在<BrowserRouter> and <Switch>我的 index.js 文件中定义的元素。

模块类有一个constructor and componentWillMount方法。这些设置了记录 #2 的初始详细信息和加载信息。到目前为止一切正常。

现在,我的问题是,在 Module.js 的孙子组件中,我使用以下重定向重定向到另一个页面,例如第 3 页:

return (
        <Redirect to="/parentdir/module/3/" />
)

构造函数或 componentWillMount 不会运行,因此记录 #3 无法正确加载。这是因为该组件从加载记录 #2 时就已经加载到内存中了吗?重新加载 Module.js 以便正确加载记录 #3 的最佳方法是什么?我是否必须以某种方式重新初始化该类?或者我是否必须以某种方式将数据从孙子组件传递回模块类?后一种方法似乎很乏味。

只是为了澄清,如果我直接去http://example.com/parentdir/module/3 http://example.com/parentdir/module/3在地址栏中,一切正常,但如果我在 ReactJS 环境中重定向到同一地址,它就无法正常工作。

Update

到目前为止,我的问题已经得到了两个答案。一种解决方案建议使用 componentWillReceiveProps。另一种解决方案建议将方法作为支柱传递给子代,然后传递给孙子。使用这些方法各有利弊,还是只是一个偏好问题?


The id被传递为prop形式为this.props.params.id所以你应该使用componentWillReceiveProps每次运行的生命周期方法props改变你的情况正在发生的事情。

The componentWillMount当您从以下位置导航时,该方法将不会运行/parentdir/module/2 to /parentdir/module/3因为该组件已经mounted。它只会在您从其他组件导航时运行(例如,当您直接访问时)。

In your Module组件添加此生命周期方法

componentWillReceiveProps(nextProps){
      if(nextProps.params.id != this.props.params.id){
          //load information etc (whatever you are doing in componentWillMount)
       }
}

正在发生的事情是,当它收到更新的一组props它正在比较参数是否id已更改(所有路由参数都位于params对象在props),当它看到有变化时,它就会执行逻辑。比较并不是真正必要的,您可以按原样添加逻辑componentWillReceiveProps方法,但这效率很低,因为每次都会调用它props对象发生变化(可能不是id参数)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重定向时重新初始化类 的相关文章

随机推荐