Как на React сделать вертикальное меню с выделением элемента меню?

Добрый день. Новичок в реакте, поэтому надеюсь на ваши советы
Что я имею ввиду:
получил массив, нарисовал по нему меню

render() {
    return (
        <ul className="nav nav-pills nav-stacked ">
            {this.props.itemList.map(
                function (item) {
                    return <MenuItem item={item}  />
                }
            )}
        </ul>
    )
};


Надо, чтобы при нажатии на элемент меню он выделялся другим цветом. Это все получилось сделать. Но как сделать так, чтобы при нажатии на другой элемент это выделение снималось и появилось на другом элементе?
  • Вопрос задан
  • 4087 просмотров
Пригласить эксперта
Ответы на вопрос 2
Надо, чтобы при нажатии на элемент меню он выделялся другим цветом. Это все получилось сделать.

Странно, что одно работает, а другое - нет. Механизм ведь один и тот-же. Простейшая реализация предполагает сохранение выбранного элемента меню в state:

class MyMenu extends React.Component {

  constructor(props) {
    super(props);
    this.handleItemClick = this.handleItemClick.bind(this);
    this.state = { selectedItem: null };
  }

  handleItemClick(selectedItem) {
    console.log('handleItemClick', selectedItem);
    this.setState({ selectedItem });
  }

  render() {
    const { items } = this.props;
    const { selectedItem } = this.state;
    const { handleItemClick } = this;

    return (
      <ul>
        { items.map( (item, key) => (
            <MenuItem
                key={key}
                item={item}
                isActive={item === selectedItem}
                onClick={handleItemClick}
             />
        )) }
      </ul>
    );
  }
}


И, соответственно, в самом компоненте MenuItem проверяем - если флаг isActive === true, то добавляем класс или еще чего:
Рабочий пример
Ответ написан
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы