Задать вопрос
@Slav4ka

Как осуществить передачу данных между компонентами?

Пытаюсь разобраться, как передавать данные между siblings-компонентами. Нужно сделать так, чтобы класс active был только у одного child-компонента (можно было выделить только один div).
Я пытался реализовать это через хуки, не классы. В результате при клике у выбранного компонента меняются классы, а у его siblings ничего не происходит. Хотя всё должно быть синхронно и только один компонент должен быть с классом "active". Как я понимаю, они попросту не перерисовываются. Как это исправить? И такой подход для реализации заданной цели правильный? Или моя идея в корне неверна?

  • Вопрос задан
  • 220 просмотров
Подписаться 2 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Frontend-разработка на React
    10 недель
    Далее
  • Академия Эдюсон
    React-разработчик + ИИ
    2 месяца
    Далее
  • Яндекс Практикум
    React-разработчик
    3 месяца
    Далее
Решения вопроса 1
0xD34F
@0xD34F Куратор тега React
const ChildComponent = (props) => (
  <div
    className={`childComponent ${props.isActive ? 'active' : ''}`}
    onClick={props.onClick}
    data-id={props.id}
  >
    <h3>{props.text}</h3>
  </div>
);

const ParentComponent = ({ items }) => {
  const [ active, setActive ] = React.useState(null);

  const onClick = e => setActive(+e.currentTarget.dataset.id);

  return (<>
    {items.map(n =>
      <ChildComponent
        key={n.id}
        onClick={onClick}
        isActive={n.id === active}
        {...n}
      />
    )}
  </>);
};

ReactDOM.render(
  <ParentComponent
    items={[
      { id:  69, text:  'hello, world!!' },
      { id: 187, text:  'fuck the world' },
      { id: 666, text: 'fuck everything' },
    ]}
  />,
  document.getElementById('root')
);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы