在渲染函数的SetTimout()中使用setState

时间:2018-09-21 14:06:21

标签: reactjs

render() {
      ...
      if (changed) {

          setTimeout(() => {
            this.setState({book_id: book.id});
          })
      }


}

如果没有setTimeout,将出现控制台警告。有足够的理由根据逻辑更新状态。我的问题是

1)这种模式是否违反或遵循最佳做法?

2)为什么?

2 个答案:

答案 0 :(得分:4)

您不应该在渲染中使用setState,它会重新渲染组件并再次调用setState,您刚刚创建了一个无限循环。

在这里您可以了解有关React生命周期https://developmentarc.gitbooks.io/react-indepth/content/life_cycle/the_life_cycle_recap.html

的信息

您可以在其中看到setState合适的图像;

祝你好运!

答案 1 :(得分:0)

Modig 所述,在render()中使用 setState 将创建一个无限循环。通常应该避免这种情况。

此外有关原因?您可以检查

  

https://github.com/airbnb/javascript

这是关于js / jsx的非常不错且最新的样式指南,您会在所需的最佳实践中看到。

最后,也取决于您使用的文本编辑器/ IDE,有一种方法可以导入其.eslint,以便当您不使用最佳做法编写代码时可以向您显示警告或当您必须避免某些事情时。