Реагировать Hoooks: изменить состояние детей от родителя - PullRequest
0 голосов
/ 21 апреля 2020

У меня проблема с изменением состояния дочернего элемента из родительского компонента. Вот пример песочницы.
https://codesandbox.io/s/parent-child-communication-hooks-34tjn?file= / src / components / Child.jsx

Вот моя цель: когда пользователь нажимает «Включить все кнопки» в родительском элементе component, Все дочерние компоненты будут включены вместе. Отключение отключит всех детей.

Но все же, необходимо контролировать каждого ребенка.

1 Ответ

0 голосов
/ 21 апреля 2020

Привет и добро пожаловать в StackOverflow. В вашем CodeSandbox я вижу, что вы начали использовать React Hooks. Кроме хука useState у нас есть useEffect, который будет срабатывать после изменения зависимости. Вы можете добиться этого, используя этот хук.

Просто добавьте новую опору в ваш дочерний компонент, эта опора будет содержать значение состояния для родителя, мы назовем это parentValue. Это ваш родительский компонент

//Parent.jsx
//your code
      {childrentdata.map(x => (
        <ChildComponent
          name={x.name}
          buttonOn={state.ParentOn}
          parentValue={state.ParentOn}
        />
      ))}

Затем в ваш дочерний компонент добавьте хук

useEffect(() => {
    setState(prevState => ({ ...prevState, buttonOn: props.parentValue }));
  }, [props.parentValue]);

Хук будет наблюдать за реквизитами и изменениями состояния, которые мы указываем в зависимости массива как Второй аргумент. Таким образом, каждый раз, когда изменяется родительский переключатель, он будет изменять всех дочерних элементов. Я внес изменение, если вы заметили, что я использую обратный вызов внутри вашего setState, так мы можем получить фактическое значение для состояния, не получая устаревшего значения. Поэтому рекомендуется использовать этот обратный вызов для предотвращения побочных эффектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...