【发布时间】:2019-04-09 06:13:44
【问题描述】:
我正在自学 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 函数的这种变化有效?
这是同一代码 sn-p 中的一个更小问题。使用有效的 getNavList() 我使用速记语法“...”返回一个 React.Fragment,但是当我尝试使用“
请原谅我的代码 sn-ps 和 React 标签中的错误和间隔错误。我无法弄清楚如何在不添加额外空格的情况下让它们显示,我几乎完全确定这不是语法错误,但如果是这种情况,请随时证明我错了。
【问题讨论】:
标签: javascript arrays reactjs this react-fullstack