コンポーネント上の useEffect() (or useLayoutEffect()) で複雑なこと、特に再レンダリングを発生させるsetState()等をすると、deps配列(第2引数)の指定方法などによっては、おかしな挙動を起こしうるのでなるべく避けたいです。何より、テストが面倒なプレゼンテーションロジックは、常にシンプルに保つ方がメンテナンスが容易になります。 追記: これはStateの更新がEvent(setState())を発生させ、さらなるState更新を生むことで、データの流れが複雑になっているというところが本質かなと思います。ReduxじゃなくてもUnidirectional Data Flow(単方向データフロー)は普遍的な概念として有効なはずです。 Unidirectional Data Flowについては画像作りをサボってしまったのでこの記事あたりを参照してください
![useEffect()内でsetState()するのを減らすテク](https://cdn-ak-scissors.b.st-hatena.com/image/square/941c262d4325b4401928500f35f691805b826e96/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--e_kYUYU3--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3AuseEffect%252528%252529%2525E5%252586%252585%2525E3%252581%2525A7setState%252528%252529%2525E3%252581%252599%2525E3%252582%25258B%2525E3%252581%2525AE%2525E3%252582%252592%2525E6%2525B8%25259B%2525E3%252582%252589%2525E3%252581%252599%2525E3%252583%252586%2525E3%252582%2525AF%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_37%3Aypresto%252Cx_203%252Cy_121%2Fg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyLzIxNzc4NmM1NzUuanBlZw%3D%3D%252Cr_max%252Cw_90%252Cx_87%252Cy_95%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png)