首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么是以动态的方式加载列表中的每个项目的材料UI对话框的正确方式?

什么是以动态的方式加载列表中的每个项目的材料UI对话框的正确方式?
EN

Stack Overflow用户
提问于 2022-01-29 06:51:02
回答 1查看 1.4K关注 0票数 1

假设我有一个客户列表,我以表格的格式显示他们。

我可以在每个客户行的末尾添加一些图标,让用户管理每一行。典型的图标有、delete、、编辑以及类似的图标。

现在,我想添加一个图标/操作,它打开一个对话框,将一些数据从行传递到对话框,并在对话框关闭时从对话框中获取数据。

在角度上,我会很容易做到。因为我可以编程地调用showDialog方法或类似的方法,并将参数传递给它,并获得结果。很有活力。

然而,在react + Material中,我被困住了。

我想呈现一个对话框,在单击每一行的操作时,我希望显示该对话框并将数据传递给它,并从中获取数据。

正确的方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2022-01-29 09:54:13

呈现具有视图或编辑对话框的数据列表,该对话框可以使用React & MUI处理每一项

最低要求是:

  1. 创建一个对话框组件,它可以:显示信息、编辑信息和点击保存
  2. ,该父组件呈现所有数据,并具有打开/关闭对话框的逻辑,并且可以以更好的方式(

)连接到API。

这是一个用react,mui,和类型记录做的样本

定义示例数据和类型

代码语言:javascript
运行
AI代码解释
复制
const tablesData = [
    { customerId: 1, customerName: 'customer1', address: 'some address 1' },
    { customerId: 2, customerName: 'customer2', address: 'some address 2' },
    { customerId: 3, customerName: 'customer3', address: 'some address 3' },
    { customerId: 4, customerName: 'customer4', address: 'some address 4' },
    { customerId: 5, customerName: 'customer5', address: 'some address 5' },
];

type Customer = typeof tablesData[number];

定义了一个对话框组件,该组件可以显示客户的地址,如果您愿意,该地址可以编辑,并在以后提交给API。

代码语言:javascript
运行
AI代码解释
复制
interface EditCustomerDialogProps {
    open: boolean,
    closeHandler: () => void,
    customer: Customer,
    onSave: (customer: Customer) => void,
}

function EditCustomerDialog(props: EditCustomerDialogProps) {

    const { open, closeHandler, customer, onSave } = props;

    useEffect(function onCustomerChangeUpdateFormValues() {
        setAddress(customer.address);
    }, [customer]);

    const [address, setAddress] = useState('');
    const addressChangeHandler = useCallback(function _addressChangeHandler(event: any) {
        setAddress(event.target.value);
    }, []);


    const saveHandler = useCallback(function _saveHandler() {

        onSave({
            ...customer,
            address, // editable info,
        });

        closeHandler();
    }, [address]);


    return (
        <Dialog open={open} onClose={closeHandler}>

            <DialogTitle>
                {'Edit customer info'}
            </DialogTitle>

            <DialogContent dividers>
                <TextField
                    placeholder="address"
                    value={address}
                    onChange={addressChangeHandler}
                />
            </DialogContent>

            <DialogActions>
                <Button onClick={saveHandler}>
                    {'Save'}
                </Button>
                <Button onClick={closeHandler}>
                    {'Cancel'}
                </Button>
            </DialogActions>

        </Dialog>
    );
}

控制对话框并可能在保存时调用API的父组件

代码语言:javascript
运行
AI代码解释
复制
function ComponentXYZ() {


    const [openEditDialgo, setOpenEditDialog] = useState(false);

    const closeDialogHandler = useCallback(function _handleClose() {
        setOpenEditDialog(false);
    }, []);

    const [selectedCustomer, setSelectedCustomer] = useState<Customer>({
        customerId: 0,
        customerName: '',
        address: '',
    });

    function customerEditHandler(customer: any) {
        setSelectedCustomer({ ...customer });
        setOpenEditDialog(true);
    }

    const saveHandler = useCallback(function _saveHandler(customer: Customer) {
        console.log({ customer });
    }, []);

    return (
        <Fragment>

            <EditCustomerDialog
                open={openEditDialgo}
                closeHandler={closeDialogHandler}
                customer={selectedCustomer}
                onSave={saveHandler}
            />

            <div>
                {
                    tablesData.map(customer => (
                        <Stack
                            key={customer.customerId}
                            direction="row">
                            <Typography>
                                {customer.customerName}
                            </Typography>
                            <Button onClick={() => customerEditHandler(customer)}>
                                {'edit info'}
                            </Button>
                        </Stack>
                    ))
                }
            </div>

        </Fragment>
    );

}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70906613

复制
相关文章
flex4/flash builder中动态加载Module并与之交互的正确方式
关于flex中动态加载Module的文章,网上有很多,但多半是基于flex3的,如果在flash builder/flex4中按他们所提供的方法去做,最后将module加载到容器中时,会报:null object reference错误。 经过多番摸索,发现只能在ready回调中,以Object这种基本类型使用,不能强制做任何类型转型,方能正常加载到容器,并与加载后的实例交互(虽然这样flash builder的IDE环境中,无法智能代码提示),原因不明! 开始吧,先创建一个mxml Module,命名为:
菩提树下的杨过
2018/01/22
6740
Springboot加载动态Bean的10种方式
在Springboot中,可以使用@Bean注解在配置类中动态创建Bean,例如:
疯狂的KK
2023/03/26
3.9K0
react中key的正确使用方式
在开发react程序时我们经常会遇到这样的警告,然后就会想到:哦!循环子组件忘记加key了~
ConardLi
2019/09/08
3K0
技巧|Python 制作动态图表的正确方式
关于动态图表,相信大家都或多或少的接触过一些,如果是代码水平比较不错的,可以选择 Matplotlib,当然也可以使用 pyecharts 的相关功能,不过这些工具都专注于图表的制作,也就是对于图表的数据,你是需要自行转换的。而今天介绍的这个可视化图库,完美的结合了 Pandas 数据格式,又辅以 Matplotlib 的强大功能,使得我们制作动图变得容易的多了。
码农向前冲
2021/12/22
1.5K2
技巧|Python 制作动态图表的正确方式
Ajax方式分页加载列表实现
  最近需要用到这个功能,所以这几天一直在研究这个,目前大致功能已实现,后续需要完善,但需要的功能点已完成,记录下;
JQ实验室
2022/02/09
3.5K0
正确的用户拖拽方式
大部分产品都只做了一部分反馈效果,用起来也够了,但更充足的反馈能够带来更好的体验。
越陌度阡
2022/07/28
1K0
正确的用户拖拽方式
使用 BigDecimal 的正确方式
Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数,但在实际应用中,可能需要对更大或者更小的数进行运算和处理。
BUG弄潮儿
2022/06/07
1.3K0
使用 BigDecimal 的正确方式
打开orika的正确方式
缘起 架构分层 开发分布式的项目时,DO持久化对象和DTO传输对象的转换是不可避免的。集中式项目中,DO-DAO-SERVICE-WEB的分层再寻常不过,但分布式架构(或微服务架构)需要拆分模块时,不
kirito-moe
2018/04/27
3.9K0
打开orika的正确方式
按钮样式的正确方式
如果你正在建立一个网站或一个web应用,你可能会用到按钮,也许看起来像按钮的链接。不管怎样,让这些正常展示是很重要的。
frontoldman
2019/09/02
3.9K0
按钮样式的正确方式
面试官:Redis中列表的内部实现方式是什么?
在面试间里等候时,感觉这可真暖和呀,我那冰冷的出租屋还得盖两层被子才能睡着。正要把外套脱下来,我突然听到了门外的脚步声,随即门被打开,一位眉毛弯弯嘴唇红红的小姐姐走了进来,甜甜的香水味立刻钻进了我的鼻孔。
万猫学社
2022/04/22
3220
ThreadPoolExecutor的submit正确的使用方式
线程池的地方用的还是挺多的,一般来说用的多的还是execute方法,submit方法还是用的挺少的,一般ThreadPoolExecutor 的 submit 方法通常用于将一个任务提交到线程池中执行。这个方法会返回一个 Future 对象,可以用来检查任务的执行状态,获取任务的返回值或者取消任务的执行。
查拉图斯特拉说
2023/10/25
5880
ThreadPoolExecutor的submit正确的使用方式
JSP 弹出对话框的方式总结
JSP 网页在与用户交互的过程中,有时需要弹出提示框,通知用户一些信息,如登录密码错误等
阳光岛主
2019/02/19
4K0
在PHP中strpos函数的正确使用方式
首先简单介绍下 strpos 函数,strpos 函数是查找某个字符在字符串中的位置,这里需要明确这个函数的作用,这个函数得到的是位置。 如果存在,返回数字,否则返回的是 false。 而很多时候我们拿这个函数用来判断字符串中是否存在某个字符,一些同学使用的姿势是这样的 // 判断‘沈唁志博客’中是否存在‘博客’这个词 if (strpos('沈唁志博客', '博客')) { // 如果存在执行此处代码 echo '存在'; }else{ // 如果不存在执行此处代码 e
沈唁
2018/05/24
5.7K0
单向链表实现的正确方式
首先我们定义链表的基本接口,为了显示出 B 格,我们模仿我们 Java 中的 List 接口定义。
码哥字节
2020/04/13
8490
Python发射导弹的正确方式
專 欄 ❈ Toby,Python中文社区专栏作者,目前供职于国内最大的医药大数据平台,任数据分析组长。关注自然语言处理,英文密码学,医药统计学。 博客: http://www.cnblogs.com/webRobot ❈—— ——此文以纪念南京大屠杀79周年 今天Toby教你如何用python的basemap包绘制轰炸东京的地图。 在数据可视化过程中,我们常常需要将数据根据其采集的地理位置在地图上显示出来。比如说我们会想要在地图上画出城市,飞机的航线,乃至于军事基地等等。通常来说,一个地理信息系统都会带
Python中文社区
2018/01/31
1.5K0
Python发射导弹的正确方式
正确下载youtube视频的方式
youtube这个不存在的网站上有很多有用的资料,一般来说我们是可以下载所有视频到本地以供离线的情况下的研究学习,网上有很多工具提供了下载功能,但是在试用了很多标称很好用的软件后,老高发现,真的没有一个能和youtube-dl相提并论,所以老高还是记录一下如何使用正确使用youtube-dl!
老高的技术博客
2022/12/28
1.3K0
打开Shapefile文件的正确方式
Shapefile文件是美国ESRI公司发布的文件格式,因其ArcGIS软件的推广而得到了普遍的使用,是现在GIS领域使用最为广泛的矢量数据格式。官方称Shapefile是一种用于存储地理要素的几何位置和属性信息的非拓扑简单格式。
卡尔曼和玻尔兹曼谁曼
2019/01/22
2.9K0
投影栅格的正确使用方式
需求就是想把wgs84的地理坐标转换成2000的投影坐标,在网上看的方法但是会报错,说是ArcGIS10.5的问题,今天试了下10.2的版本可以了,所以记录下过程,免得以后忘记了。
罗罗攀
2022/05/13
9610
投影栅格的正确使用方式
旁路由设置的正确方式
上图是旁路由的连接方式,一般作为旁路由的只有一个LAN口,可以把它想成一个普通的连接路由器的电脑。让他们ip在一个网段即可,比如主路由网关192.168.3.1,旁路由配置成192.168.3.2
全栈程序员站长
2022/07/01
10.4K0
旁路由设置的正确方式
正确使用HTTP代理的方式
互联网的大数据时代,网络爬虫的工作离不开大数据。在我们使用网络过程中,肯定遇到过访问网站IP受限这种问题。其实不是你的IP出现了问题,而是对方因为目标网站的服务器的限制,限制了多次注册,多次访问,才会限制本地IP。如果想一直访问目标网站,这时候可以利用隧道转发的爬虫代理加强版来上网,隧道转发爬虫代理加强版使用起来非常简单。
用户6172015
2021/02/04
8330

相似问题

什么是正确的方式来扩展材料UI ListItem?

27

什么是正确的方式使用材料-ui CSS?

20

我的功能不是以正确的方式加载

11

角质材料加载方式不正确

11

这是以编程方式调用片段的正确方式吗?

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档