reactjs - React 错误中超出最大更新深度
问题描述
所以我试图将一些道具从孩子发送给父母并得到这个错误。我正在尝试将回调函数从子组件发送到父组件并在子组件中调用该函数。我以前用过这个,但这次我得到了这个错误。
这是我的父组件。
import React from 'react';
import AppBar from '@material-ui/core/AppBar';
import SideDrawer from './SideDrawer';
class Header extends React.Component {
state={
drawerOpen:false
}
toggleDrawer = (value)=>{
this.setState({
drawerOpen: value
});
}
render(){
return(
<AppBar>
<SideDrawer
open={this.state.drawerOpen}
onClose={this.toggleDrawer}
/>
</AppBar>
);
}
}
export default Header;
这是子组件
import React from 'react';
import Drawer from '@material-ui/core/Drawer';
import List from '@material-ui/core/List';
import ListItem from '@material-ui/core/ListItem';
const SideDrawer = (props) => {
return (
<Drawer
anchor="right"
open={props.open}
onClose={props.onClose(false)}
>
</Drawer>
);
};
export default SideDrawer;
解决方案
您收到此错误是因为您正在触发持续更新的事情。
您的<Drawer />
组件直接触发onClose
道具。为了防止这种情况,您可以编写如下组件:
<Drawer
anchor="right"
open={props.open}
onClose={() => props.onClose(false)}
>
</Drawer>
这样它只会被触发onClose
要获得完整的循环细节,这里是:
- Drawer 被渲染,onClose 被触发。
- onClose 更新了抽屉打开值
- 状态已更新,重新渲染
SideDrawer
,因为它使用drawerOpen
来自状态的值 - Drawer 被渲染,onClose 被触发。
- 循环又开始了,有点无限
推荐阅读
- excel - 顺序复制和粘贴宏到参考单元格
- reactjs - 不知道为什么当我等待时仍会返回承诺
- c - 如何将 unsigned short 7273 转换为 ascii HI
- join - 在 Google 表格中附加两个查询的结果失败
- android-jetpack - 如何在jetpack compose中显示多个TextField的错误消息
- python - Python __str__ 方法在多行中返回对象列表的值
- flutter - 库 'package:splashscreen/splashscreen.dart' 是旧版,不应导入到空安全库中
- amazon-web-services - Amazon S3 从 Lambda 函数读取文件操作超时,任务在 30.03 秒后超时
- macos - 如何在 Apple Silicon Mac 上运行 Elasticsearch 6?
- swift - 使用 SwiftUI 的卧式日历