2

我目前在问自己,useEffect 是否总是正确的方法。我正在考虑这个,因为我目前的项目。

想象一下,您必须遵循:

  • 一个query只是后端查询的状态。一个查询也知道一个sorting. 这将由一个方法填充,该方法从后端loadQuery获取配置。query但是初始状态是空的query并且不是未定义的。

  • 一种loadData从类型后端加载数据的方法Entity[]。此方法消耗状态query。这可以直接触发,因为空query的查询是有效的。

  • 一种loadView从 type 的后端加载视图的方法View。Aview只是一个 JSON,它描述了表格的单元格并具有sorting属性。

  • 一个 useEffect,它调用loadDataloadView。作为依赖,我们有query.

  • 一个 useEffect 函数,它监听加载的view. 如果加载的视图有一个sorting属性,那么它将操纵query状态。这将导致从上面的一点再次触发 useEffect。

这是当前的情况(当然缩短了)。我们还有

  • view切换按钮,再次变为query。这将导致加载数据的useEffect被触发。
  • 表中的无限加载(也将loadData使用偏移量调用),
  • 可以更改,query如果用户更改查询FilterDialog

有时候加载数据的useEffect,会连续触发3次。

当然,一个解决方案是记住一个布尔值是否已经加载了一些数据......但是由于我们有不止一个 useEffect,所以很难做到这一点。为此也很难记住布尔值,因为如果发生componentDidUpdate循环,那么您必须重置这些布尔值,因为一切都应该像以前一样执行。但这可能会导致问题,因为一切都是异步的。

也许其他人也有同样的问题,有太多的 useEffects 这会导致不必要的事情,可以和我分享他的经验:)

4

0 回答 0