ReactJS - 将参数传递给函数时出错
ReactJS - error passing an argument to a function
我有以下Reactjs代码。它生成一个内联菜单(元素列表)。如果我单击特定元素,我希望它在控制台中输出,但它不起作用。
import React from "react";
export default class GalleryHeader extends React.Component {
handleClick(cat) {
console.log(cat);
}
createItems(items) {
var output = [];
for(var i = 0; i < items.length; i++)
output.push(<li onClick={this.handleClick({items[i]})}>{items[i]}</li>);
return output;
}
render() {
return (
<ul class="list-inline">
{this.createItems(this.props.menuItems)}
</ul>
);
}
}
调用函数时似乎出错
{this.handleClick({items[i]})}
当我像下面这样删除函数参数时,它工作正常:
handleClick() {
console.log("test");
}
createItems(items) {
var output = [];
for(var i = 0; i < items.length; i++)
output.push(<li onClick={this.handleClick}>{items[i]}</li>);
请指教。
这不是 ReactJS 错误,而是一个简单的 JS 错误。
您需要将函数引用传递给 onClick
事件。当您执行<li onClick={this.handleClick({items[i]})}>{items[i]}</li>
时,您将执行该函数并将其结果传递给事件。
正确的调用应该是这样的
<li onClick={this.handleClick.bind(this, items[i])}>{items[i]}</li>
这样,您的this
范围不会改变,您也可以接收参数。
另一种解决方案是使用 ES6 箭头函数作为:
<li onClick={() => this.handleClick(items[i])}>{items[i]}</li>
这里有什么区别?
好吧,现在您正在传递一个函数引用(如() => {}
所暗示的那样),该引用将在之后调用您的this.handleClick()
。
与您的问题无关的提示
首先,在使用 JSX 语法时,您应该使用 className
而不是class
。这很容易忘记!
其次,建议在循环中渲染元素时使用 key
属性。所以你的<li>
将是:
<li key={i} onClick={() => this.handleClick(items[i])}>{items[i]}</li>
通过这种方式,React 可以优化其渲染并停止在浏览器控制台上给您警告/错误。
您可以进一步阅读 React 文档中的键:片段多个组件和和解
在你的代码中有几个错误
-
你应该传递给函数
onClick
引用,但你调用它,结果传递给onClick
- 但结果是undefined
(onClick={ undefined }
),这就是点击不起作用的原因。要解决此问题,您可以使用.bind
onClick={ this.handleClick.bind(this, items[i]) }
或
arrow function
onClick={ () => this.handleClick(items[i]) }
-
在 React 中设置类属性,你应该使用
className
属性而不是class
<ul className="list-inline">
Example
- 尝试调用AngularJS上的函数时出错
- 得到"未定义不是函数“;使用显示原型图案时出错
- 从函数中的函数返回数组时出错
- 从 java 脚本调用函数时 PHP 中出错
- 使用PHP和Javascript在函数内部传递alphaneumeric值作为参数时出错
- 比较$watch函数内的基元类型时出错
- CakePHP错误:在非对象上调用成员函数get(),使用cakejavascript助手时出错
- 构造函数出错
- javascript函数出错
- AngularJS:没有定义$rootscope的全局函数出错,没有定义$scope
- Java脚本函数不;一个函数出错后无法工作
- OnClick函数出错
- 函数b()出错
- for循环中的JavaScript匿名函数出错
- 使用带有href的attr函数出错
- 从外部文件调用JavaScript函数出错
- 使用本地存储的可排序列表函数出错
- 确定数字中位数的函数出错
- PHP邮件函数发送电子邮件,但AJAX函数出错
- ajax函数出错,尽管它转到了我的webservice