代码之家  ›  专栏  ›  技术社区  ›  Craig

基于所选项目的URL更改-但页面未刷新

  •  0
  • Craig  · 技术社区  · 5 年前

    example.com/

    example.com/account/1234

    这很管用。

    但我想转到5678账户。因此,在我的帐户屏幕上,我尝试导航到:

    example.com/5678

    所以它从 example.com/1234 示例com/5678

    BrowserRouter

    我的路线已设置:

    <Route exact path="/account/:id" component={AccountEditor} />
    

    我的链接是:

    <Link to={{ pathname: `/account/${this.props.accountId}`, state: params}}>{this.props.name}</Link>
    

    当组件保持不变,但ID发生更改时,我如何使其允许更改?

    我如何使用路由,这可能是错误的,因为我是新手,但到目前为止它还在工作,除了这个问题是-我有一个主布局组件。它分成两列。左边的一个固定列,显示所有页面上的信息,然后是主部分,根据所选的URL进行更改。

         <Row>
            <Col md="2">
              <LeftInfoBar />
            </Col>
            <Col md="10">
                <RouteManager />
            </Col>
          </Row>
    

    组件RouteManager中包含以下所有组件:

    class RouteManager extends React.Component {
    
        render() {
    
            return (
                <Switch>
                    <Route exact path="/" component={Dashboard} />
                    <Route exact path="/accounts" component={Accounts} />
                    <Route exact path="/accounts/:id" component={Accounts} />
                    ... lots of other components...
                </Switch>
            )
        }
    
    }
    export default RouteManager
    
    1 回复  |  直到 5 年前
        1
  •  2
  •   wbd    5 年前

    页面组件将不会卸载然后装载,因为只有URL参数正在更改,而不是“/account”的路由。在本例中,我使用的是使用props中的id检查componentdiddupdate。

    这将进入您的帐户页组件中。你不必为此改变任何路线。

    componentDidUpdate(prevProps) {
      if (this.props.match.params.id !== prevProps.match.params.id) {
        this.setState({ ['someStateProperty']: newValue })
      }
    }
    

    您必须将setState编辑为您使用的任何内容,但这将触发重新提交。如果需要使用api调用,还可以使用fetch获取其中的新数据 if 条件并将结果值保存到state。