Я учу себя Реагировать, и я столкнулся с чем-то, что мне трудно понять. Когда я строю свой проект с кодом в getNavList () ниже, я получаю следующую ошибку при нажатии одной из кнопок, отображаемых в моем компоненте, «не может прочитать свойство undefined« click »реагирует».
export class Pane extends React.Component {
constructor(props) {
super(props);
}
getNavList() {
var buttons = [];
if(this.props.subNavButtons != null){
for(var i = 0; i < this.props.navButtons.length; i++) {
buttons.push(<Button onClick={this.props.navButtons[i].click()} title={this.props.navButtons[i].title} />);
buttons.push(<Button onClick={this.props.navButtons[i + i].click()} title={this.props.navButtons[i + i].title} />);
buttons.push(<Button onClick={this.props.navButtons[i + i + 1].click()} title={this.props.navButtons[i + i + 1].title} />);
}
} else {
buttons = this.props.navButtons.map(button => (<Button onClick={() => button.click()} title={button.title}/>));
}
return buttons;
}
render() {
return (
<div>
<ul>
{this.getNavList()}
</ul>
</div>
);
}
}
Когда я строю свой проект со следующими изменениями, все работает как положено:
export class Pane extends React.Component {
constructor(props) {
super(props);
}
getNavList() {
var buttons = [];
if(this.props.subNavButtons != null){
buttons = this.props.navButtons.map((button, index) => (<>
<Button onClick={() => button.click()} title={button.title}/>
<Button onClick={() => this.props.subNavButtons[index + index].click()} title={this.props.subNavButtons[index + index].title}/>
<Button onClick={() => this.props.subNavButtons[index + index + 1].click()} title={this.props.subNavButtons[index + index + 1].title}/>
</>));
}
else {
buttons = this.props.navButtons.map(button => (<Button onClick={() => button.click()} title={button.title}/>));
}
return buttons;
}
render() {
return (
<div>
<ul>
{this.getNavList()}
</ul>
</div>
);
}
}
Из того, что я смог найти, кажется, что есть проблема с тем, что "this" теряет свой контекст, когда я передаю функцию как свойство компонента. Я попытался связать функцию, переданную объекту Pane в его родительском классе, но безрезультатно. Я также попытался определить функцию, используя обозначение стрелки вместо этого без удачи. С учетом вышесказанного, почему это изменение из цикла for в функцию map работает?
Вот еще одна небольшая проблема в том же фрагменте кода. С работающим getNavList () я возвращаю React.Fragment, используя сокращенный синтаксис "<> ... </>", но когда я пытаюсь использовать " ... ", я получаю Ошибка в том, что в конце моего оператора else есть ожидаемый символ '}'. Что, черт возьми, это значит?
Пожалуйста, извините и пробелы в моих фрагментах кода и тегах React. Я не мог понять, как заставить их отображаться без добавления дополнительных пробелов, и я почти полностью уверен, что это не синтаксическая ошибка, но не стесняйтесь доказать, что я ошибаюсь, если это так.