ReactJS - изменить значение атрибута при нажатии

Я разрабатываю веб-приложение с использованием фреймворка ReactJS.

Я пытаюсь написать событие, которое, когда я нажимаю на один элемент в наборе, меняет значение выбранного атрибута на true и устанавливает для остальных элементов значение false.

<NavigationButton to = "/" label = "Dashboard" exact>
<MenuItem className = {classes.menuItem} selected = {true/false}>
    <ListItemIcon className = {classes.icon}>
        <Home />
    </ListItemIcon>
    <ListItemText classes = {{ primary: classes.primary }} inset primary = "Strona główna" />
</MenuItem>
</NavigationButton>
<NavigationButton to = "/payment" label = "Payment" exact>
<MenuItem className = {classes.menuItem} selected = {true/false}>
    <ListItemIcon className = {classes.icon}>
        <Payment />
    </ListItemIcon>
    <ListItemText classes = {{ primary: classes.primary }} inset primary = "Moje płatności" />
</MenuItem>
</NavigationButton>

Как мне это сделать?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
35
1

Ответы 1

Я думаю, что лучший способ сделать это - включить все ваши компоненты в компонент с отслеживанием состояния, который будет отслеживать, какой из ваших элементов выбран или нет. Затем этот компонент будет иметь функцию (что-то вроде handleClick), которая будет принимать этот класс кнопок нажатия и setState, изменяющийся на элемент, который должен быть выбран сейчас. Теперь вы можете передать функцию и состояние (то, что в настоящее время предполагается выбрать) в качестве реквизита для дочерних элементов, и onClick on вызовет обратный вызов родительскому компоненту, сообщающий об этом setState. Затем в каждом из отдельных компонентов вы можете просто проверить, есть ли опора this.props.currentSelect === ${name of the element}, чтобы увидеть, следует ли выбрать этот элемент или нет.

// some jsx file
class StatefulComponent extends React.Component{
  constructor(props){
    super(props);
    this.state = {
      currentlySelect: "someMenuItem"
    }
    this.handleClick = this.handleClick.bind(this);
  }

  handleClick(str){
    this.setState({
      currentlySelect: str
    })
  }

  render(){
    return(
      <React.Fragment>
        <NavigationButton to = "/" label = "Dashboard" exact>
          <MenuItem handleClick = {this.handleClick} currentlySelect = {this.state.currentlySelect}  className = {classes.menuItem} selected = {true / false}>
            <ListItemIcon className = {classes.icon}>
              <Home />
            </ListItemIcon>
            <ListItemText classes = {{ primary: classes.primary }} inset primary = "Strona główna" />
          </MenuItem>
        </NavigationButton>
        <NavigationButton to = "/payment" label = "Payment" exact>
          <MenuItem handleClick = {this.handleClick} currentlySelect = {this.state.currentlySelect} className = {classes.menuItem} selected = {true / false}>
            <ListItemIcon className = {classes.icon}>
              <Payment />
            </ListItemIcon>
            <ListItemText classes = {{ primary: classes.primary }} inset primary = "Moje płatności" />
          </MenuItem>
        </NavigationButton>
      </React.Fragment>
    )
  }

}

Предупреждение: Неудачный тип опоры: Недействительная опора selected типа number, предоставленная для MenuItem, ожидается boolean.

rayman22 28.10.2018 02:33

Ну, я не дал вам правильный синтаксис, просто немного шаблона для начала

Andy 29.10.2018 02:11

Другие вопросы по теме