我正在自学 React,但我遇到了一些我无法理解的东西。当我使用下面的 getNavList() 中的代码构建项目时,单击组件中呈现的按钮之一时出现以下错误,“无法读取未定义的‘点击’反应的属性。”
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,但是当我尝试使用“<React.Fragment>...< /React.Fragment>”时,我得到一个错误说在我的 else 语句末尾有一个预期的 '}' 字符。这到底是怎么回事?
请原谅我的代码片段和 React 标签中的错误。我无法弄清楚如何在不添加额外空格的情况下让它们显示,我几乎完全确定这不是语法错误,但如果是这种情况,请随时证明我错了。