【问题标题】:React ComponentDidMount being called multiple timesReact ComponentDidMount 被多次调用
【发布时间】:2018-09-22 15:52:41
【问题描述】:

我正在尝试在 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 记录到控制台中,它被调用了 3 次。流程是我在登录页面(加载时安装一次),我登录将我重定向到本身呈现的主页。此时在我的控制台中,我看到:

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?

我是新手,如果您需要更多信息,请告诉我。

【问题讨论】:

  • 你是在使用外部状态库还是别的什么?
  • @Li357 不,我不是
  • @Apolozeus 检查了那个问题。我没有在我的HomeAccountItem 中生成任何密钥。任何其他想法可能是什么原因?
  • 你能显示你在哪里写控制台日志

标签: javascript reactjs react-props


【解决方案1】:

好的,问题出在我的路由器上,我正在渲染这个:

<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="/" />
                )}/> 
            )

所以房屋被多次渲染。我只是将路由器内的&lt;Home /&gt; 换成了{Home}

【讨论】:

  • @BernardoFerreiraBastosBraga 我不能 2 天
  • 嗨,@Vincent,你能在 codepen 上分享这个项目吗?我遇到了同样的问题,但无法弄清楚您的解决方案。
猜你喜欢
  • 1970-01-01
  • 2021-11-15
  • 2019-03-29
  • 1970-01-01
  • 2017-02-19
  • 1970-01-01
  • 1970-01-01
  • 2018-09-08
  • 2021-12-22
相关资源
最近更新 更多