React ComponentDidMount被多次调用

时间:2018-04-12 13:10:40

标签: javascript reactjs react-props

我正试图在AccountItem.js内部进行fetch api调用,如下所示:

componentDidMount() {
    // I am calling console.log("item mounted"); here
    var url = "myurl" + this.props.portalId;
    fetch(url)
    .then(res => res.json())
    .then(data => this.setState({account: data.Items}));
}

然后在我的Home.js里面呈现:

componentDidMount() {
   console.log("home mounted");
}
render() {
    return (
      <div>
        Account Dashboard
        <AccountItem portalId={this.props.portalId}/>
      </div>
    );
  }
}

我正在将我的fetch记录到控制台中,并且正在调用它三次。流程是我在登录页面上(加载后安装一次),我登录后将我重定向到本身呈现的主页。在我的控制台的这一点上,我看到了:

Login mounted // initial load, now I click login Login mounted // Renders again then redirects to homepage Item mounted Home mounted Item mounted Home mounted Item mounted // Why is this happening 3 times?

我是新手,如果您需要更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:0)

好的,问题发生在我的路由器中我正在呈现这个:

<BrowserRouter>
                <div>
                    // Other routes here
                        <this.PrivateRoute path="/home" exact component={<Home .... />} />
                    </Switch>
                </div>
            </BrowserRouter>

我的私人路线是:

PrivateRoute = ({ component: Component, ...rest }) => (
                <Route {...rest} render={() => (
                    this.state.isAuthenticated
                    ? <Component {...this.props} portalId={this.state.portalId}/>
                    : <Redirect to="/" />
                )}/> 
            )

因此家庭被多次渲染。我只是将路由器内的<Home />换成{Home}