我目前在问自己,useEffect 是否总是正确的方法。我正在考虑这个,因为我目前的项目。
想象一下,您必须遵循:
一个
query
只是后端查询的状态。一个查询也知道一个sorting
. 这将由一个方法填充,该方法从后端loadQuery
获取配置。query
但是初始状态是空的query
并且不是未定义的。一种
loadData
从类型后端加载数据的方法Entity[]
。此方法消耗状态query
。这可以直接触发,因为空query
的查询是有效的。一种
loadView
从 type 的后端加载视图的方法View
。Aview
只是一个 JSON,它描述了表格的单元格并具有sorting
属性。一个 useEffect,它调用
loadData
和loadView
。作为依赖,我们有query
.一个 useEffect 函数,它监听加载的
view
. 如果加载的视图有一个sorting
属性,那么它将操纵query
状态。这将导致从上面的一点再次触发 useEffect。
这是当前的情况(当然缩短了)。我们还有
view
切换按钮,再次变为query
。这将导致加载数据的useEffect被触发。- 表中的无限加载(也将
loadData
使用偏移量调用), - 可以更改,
query
如果用户更改查询FilterDialog
有时候加载数据的useEffect,会连续触发3次。
当然,一个解决方案是记住一个布尔值是否已经加载了一些数据......但是由于我们有不止一个 useEffect,所以很难做到这一点。为此也很难记住布尔值,因为如果发生componentDidUpdate
循环,那么您必须重置这些布尔值,因为一切都应该像以前一样执行。但这可能会导致问题,因为一切都是异步的。
也许其他人也有同样的问题,有太多的 useEffects 这会导致不必要的事情,可以和我分享他的经验:)