Javascript react-onclick使用事件而不使用箭头函数
我有一个返回主页的链接,其中有一个从数组中删除项目的按钮。为了防止链接重定向到主屏幕并从阵列中删除该项,我需要使用ev.preventDefault 是否可以在渲染方法中不使用箭头函数而将ev传递给react方法?从我的研究和具体情况来看,以下是实现这一目标的唯一途径 我担心arrow函数每次都会导致重新渲染,因为每次渲染都会创建新函数Javascript react-onclick使用事件而不使用箭头函数,javascript,reactjs,Javascript,Reactjs,我有一个返回主页的链接,其中有一个从数组中删除项目的按钮。为了防止链接重定向到主屏幕并从阵列中删除该项,我需要使用ev.preventDefault 是否可以在渲染方法中不使用箭头函数而将ev传递给react方法?从我的研究和具体情况来看,以下是实现这一目标的唯一途径 我担心arrow函数每次都会导致重新渲染,因为每次渲染都会创建新函数 removeItem(label, e) { e.preventDefault(); this.props.removeItem(label.i
removeItem(label, e) {
e.preventDefault();
this.props.removeItem(label.id);
}
render () {
const { label } = this.props;
return (
<Link to'/'>
<span>Go Home</span>
<span onClick={(e) => this.removeItem(label, e) }> Click me <span>
</Link>
);
}
为了避免重新创建函数,可以将参数提取到类props中。这里有一些 例如,这将始终创建一个新函数
var List = React.createClass({
render() {
return (
<ul>
{this.props.items.map(item =>
<li key={item.id} onClick={this.props.onItemClick.bind(null, item.id)}>
...
</li>
)}
</ul>
);
}
});
现在,它不会在重新渲染时重新创建函数
var List = React.createClass({
render() {
return (
<ul>
{this.props.items.map(item =>
<ListItem key={item.id} item={item} onItemClick={this.props.onItemClick} />
)}
</ul>
);
}
});
var ListItem = React.createClass({
render() {
return (
<li onClick={this._onClick}>
...
</li>
);
},
_onClick() {
this.props.onItemClick(this.props.item.id);
}
});
这里有一些这样的解释为了避免重新创建可以将参数提取到类props中的函数。这里有一些 例如,这将始终创建一个新函数
var List = React.createClass({
render() {
return (
<ul>
{this.props.items.map(item =>
<li key={item.id} onClick={this.props.onItemClick.bind(null, item.id)}>
...
</li>
)}
</ul>
);
}
});
现在,它不会在重新渲染时重新创建函数
var List = React.createClass({
render() {
return (
<ul>
{this.props.items.map(item =>
<ListItem key={item.id} item={item} onItemClick={this.props.onItemClick} />
)}
</ul>
);
}
});
var ListItem = React.createClass({
render() {
return (
<li onClick={this._onClick}>
...
</li>
);
},
_onClick() {
this.props.onItemClick(this.props.item.id);
}
});
这里有一些解释您可以删除label参数并直接从this.props获取label。像这样重构你的应用程序:
removeItem(ev) {
ev.preventDefault();
this.props.removeItem(this.props.label.id);
}
render () {
const { label } = this.props;
return (
<Link to'/'>
<span>Go Home</span>
<span onClick={this.removeItem}> Click me <span>
</Link>
);
}
这样,React将自动将click事件传递给removeItem方法
虽然应该说,在每个渲染上创建一个新函数可能并不那么昂贵。您可以删除label参数,直接从this.props获取label。像这样重构你的应用程序:
removeItem(ev) {
ev.preventDefault();
this.props.removeItem(this.props.label.id);
}
render () {
const { label } = this.props;
return (
<Link to'/'>
<span>Go Home</span>
<span onClick={this.removeItem}> Click me <span>
</Link>
);
}
这样,React将自动将click事件传递给removeItem方法
虽然应该说,在每个渲染上创建一个新函数可能并不那么昂贵。您可以删除label参数,直接从这个.props中获取label。然后您可以只使用onClick={this.removietem}虽然在每个渲染上创建一个新函数可能并不那么昂贵:很好,但是我仍然可以使用e.preventDefault吗?是的,您会:这回答了您的问题吗?我可以给出一个完整的答案。您可以删除label参数并直接从this.props获取label。然后您可以只使用onClick={this.removietem}虽然在每个渲染上创建一个新函数可能并不那么昂贵:很好,但是我仍然可以使用e.preventDefault吗?是的,您会:这回答了您的问题吗?我可以从中得出一个完整的答案。