javascript - React父函数不接收子参数
问题描述
我面临一个奇怪的问题。
我在父组件中创建了函数副本。
const copy = (field, menu) => {
console.log({ field, menu, localMetaSpec });
localMetaSpec.menus[menu.id].elements.splice(
localMetaSpec.menus[menu.id].elements.length,
0,
{ ...field, id: uuid() }
);
return localMetaSpec;
};
然后我把它给了我的子组件,我这样称呼它
[...]
case 'copy':
return (
<Tooltip title='Copy'>
<IconButton
aria-label='copy'
onClick={() => {
console.log(field);
console.log(menu);
actions.copy(field, menu);
}}
>
<FileCopyIcon />
</IconButton>
</Tooltip>
);
[...]
正如您在控制台中看到的,field和menu是objects,但是当作为函数中的参数接收时,它们变成undefined。
为什么会这样?
解决方案
好吧,问题出在我称之为子组件的父组件中:
<Menu
actions={{
copy: () => copy(),
delete: () => deleteElement(),
}}
classes={classes}
elements={elements}
key={menu.id}
menu={menu}
/>
我没有通过原始函数传递参数。所以我这样做了:
<Menu
actions={{
copy: (fieldParam, menuParam) => copy(fieldParam, menuParam),
delete: () => deleteElement(),
}}
classes={classes}
elements={elements}
key={menu.id}
menu={menu}
/>
推荐阅读
- c# - System.Runtime.Serialization.InvalidDataContractException 'System.Security.Cryptography.X509Certificates.X509Certificate2'
- angular - JSON 解析错误:无法反序列化 java.lang.Long 的实例超出 START ARRAY 令牌
- python-3.x - 我收到 pyzipper {NameError}name 'self' is not defined 和 {NameError}name 'parent_module' is not defined 的错误
- apache-kafka - 使用 docker-compose 在多个节点上的 Kafka 集群
- javascript - 带有时间戳字段的 Firestore startAt 不起作用
- json - Cloudformation 中的 Cloudwatch 仪表板错误
- javascript - 处理 Web 套接字异步请求时保持数据最新的最佳方法
- c# - 无法理解线程 C# 的行为
- angular - 使用 Angular 11 以反应形式的动态值返回 null
- apache-kafka-streams - spring-cloud-stream 示例项目引发 KafkaStreamsFunctionProcessor 的 NoSuchBeanDefinitionException