我有这些父级和子级组件,我想通过点击功能在子级组件中选择一个项目。但是,似乎子组件中的函数会自动调用,而不是等到用户单击元素后才开始调用。为了更清楚一点,这里是我的父级和子级组件
export class ParentView extends Component {
state = {
selectedItem: {}
}
handleClick = (item) => {
alert('you click me');
this.setState({selectedItem: item});
}
render() {
let item = { name: 'Item-1' };
return (
<div>
<ChildItem item={item} handleClick={this.handleClick} />
</div>
);
}
}
export class ChildItem extends Component {
render() {
const {item, handleClick} = this.props;
return (
<div>
<a onClick={handleClick(item)} />
</div>
);
}
}
这些是我使用箭头函数传递handleClick
给子组件的组件,但是警报始终在第一次渲染时被调用,而不会被用户触发。有什么建议吗?
您应该将函数本身传递给onClick
,而不是传递的函数调用的结果。
如果要使用param调用它,则可以选择:
item
与handleClick.bind(this, item)
。bind
创建一个新函数将具有预定义的第一个参数-item
() => handleClick(item)
下面的例子:
export class ChildItem extends Component {
render() {
const { item, handleClick } = this.props;
return (
<div>
<a onClick={() => handleClick(item)} />
</div>
)
}
}
在您的代码中,您要调用onClick
声明中的函数,因此handleClick
执行结果将传递给onClick
,这很可能不是您想要实现的。
<a onClick={handleClick(item)} />
更新:
正如@dhilt所写,这种方法有一个缺点。由于新创建的箭头函数以及.bind
每次调用render
方法时也会创建新函数ChildItem
,因此与以前的“缓存”
render
方法结果相比,react会将生成的react元素威胁为不同的元素,这意味着可能导致将来会出现性能问题,甚至对于eslint都有关于此问题的规则,但是由于两点,您不应该仅遵循此规则。
1)performance problems
应加以测量。我们不禁止使用Array.prototype.forEach
常规,for
因为for
相同或“更快”。
2)将单击处理程序定义为类属性会导致增加组件实例的初始化步骤。重新渲染反应快速有效,因此有时初始渲染更为重要。
只需使用对您更有利的产品,并可能阅读类似https://cdb.reacttraining.com/react-inline-functions-and-
performance-bdff784f5578的
文章
我了解在ES6中arrow函数是如何工作的,词法也是如此,但我想知道是否有人知道将参数传递给arrow函数的方法? 在ES5中,您可以简单地执行以下操作: 但是,在ES6中,如果使用箭头函数,如下所示: 变量返回一个对象,该对象与参数非常接近。 所以,我想知道是否有人有办法将参数传递给arrow函数? 我想也许我应该给一些关于我试图完成的事情的信息,也许如果上面的不可能,有人有更好的主意。 基本上
我有一个react组件,我想用不同的参数调用相同的箭头函数,但我被困在如何传递参数给它,现在我在问自己,我能做到吗?
JavaScript箭头函数 let x = [1,2,3,4,5,6,7,8]; x.sort( (a,b) => b-a ); console.log(x); 实现逆序的原理是什么? 求大佬解惑
问题内容: 在React中,我有类似的文件 parent.js 包含文本框和按钮 child.js 包含P标签 App.js 包含父组件和子组件 问题 将“父级”上的“文本框”值传递给子级,并将其显示在子级标记中。 完整代码 堆叠 问题答案: 更新了示例以将数据传递给子组件。 https://stackblitz.com/edit/react- trmj9i?file=child.js 在下面添加
问题内容: 新的es6箭头功能说在某些情况下是隐式的: 该表达式也是该函数的隐式返回值。 在什么情况下需要使用es6箭头功能? 问题答案: 隐式返回,但仅当没有块时才返回。 * 当单线扩展到多行并且程序员忘记添加时,这将导致错误。 * 隐式返回在语法上是模棱两可的。返回对象…对吗?错误。它返回。这些括号是一个明确的块。是一个标签。 我会在此添加一个块的定义: 块语句(或其他语言的复合语句)用于将零
我目前试图从react中实现tic tac toe示例,但使用的是钩子和ES6标准,但我似乎无法调用USEstate。我不断得到这些错误: 第6:33行:React Hook“usestate”在函数“game”中被称为,它既不是React函数组件,也不是自定义React Hook函数react-hooks/rules-of-hooks 这是我当前的代码: 多谢!