Я разрабатываю веб-приложение с использованием фреймворка 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>
Как мне это сделать?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я думаю, что лучший способ сделать это - включить все ваши компоненты в компонент с отслеживанием состояния, который будет отслеживать, какой из ваших элементов выбран или нет. Затем этот компонент будет иметь функцию (что-то вроде 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.