【发布时间】:2022-01-14 00:12:02
【问题描述】:
在我的组件的渲染函数中,我有:
render() {
const items = ['EN', 'IT', 'FR', 'GR', 'RU'].map((item) => {
return (<li onClick={this.onItemClick.bind(this, item)} key={item}>{item}</li>);
});
return (
<div>
...
<ul>
{items}
</ul>
...
</div>
);
}
一切正常,但是当单击<li> 元素时,我收到以下错误:
未捕获的错误:不变违规:对象作为 React 无效 孩子(找到:对象与键 {dispatchConfig,dispatchMarker, nativeEvent, 目标, currentTarget, 类型, eventPhase, 气泡, cancelable, timeStamp, defaultPrevented, isTrusted, view, detail, screenX, screenY, clientX, clientY, ctrlKey, shiftKey, altKey, metaKey,getModifierState,按钮,按钮,relatedTarget,pageX, pageY, isDefaultPrevented, isPropagationStopped, _dispatchListeners, _dispatchIDs})。如果您打算渲染一组子项,请改用数组或使用 createFragment(object) 包装对象 React 附加组件。检查
Welcome的渲染方法。
如果我在 map 函数中将 this.onItemClick.bind(this, item) 更改为 (e) => onItemClick(e, item),一切都会按预期工作。
如果有人能解释我做错了什么并解释为什么我会得到这个错误,那就太好了
更新 1:
onItemClick函数如下,去掉this.setState导致错误消失。
onItemClick(e, item) {
this.setState({
lang: item,
});
}
但我无法删除此行,因为我需要更新此组件的状态
【问题讨论】:
-
那么
this.onItemClick是如何实现的呢? -
@zerkms 感谢回复,我更新了问题,是的,问题似乎出在this.setState(),但是为什么会抛出这个错误? :(
-
如果你把
async放在函数组件上也会发生这种情况 -
最好不要在渲染方法中使用
bind。当您在渲染函数中使用bind时,会发生在调用渲染方法时会创建onItemClick的新实例。因此,您可以使用箭头函数语法或在构造函数中绑定您的方法。您可以在官方指南reactjs.org/docs/handling-events.html中找到更多详细信息。 -
感谢@PetrosKyriakou。我错误地使我的 render() 方法异步。你摇滚!
标签: javascript reactjs