Могу ли я установить состояние внутри ловушки useEffect?

Допустим, у меня есть какое-то состояние, которое зависит от какого-то другого состояния (например, когда A изменяется, я хочу, чтобы B изменился).

Уместно ли создавать ловушку, которая наблюдает за A и устанавливает B внутри ловушки useEffect?

Будут ли эффекты каскадироваться так, что, когда я нажимаю кнопку, срабатывает первый эффект, в результате чего изменяется b, вызывая срабатывание второго эффекта перед следующим рендером? Есть ли какие-либо недостатки в производительности для структурирования кода, подобного этому?

let MyComponent = props => {
  let [a, setA] = useState(1)
  let [b, setB] = useState(2)
  useEffect(
    () => {
      if (/*some stuff is true*/) {
        setB(3)
      }
    },
    [a],
  )
  useEffect(
    () => {
      // do some stuff
    },
    [b],
  )

  return (
    <button
      onClick={() => {
        setA(5)
      }}
    >
      click me
    </button>
  )
}
27
задан Bogdan D 23 July 2019 в 15:44
поделиться