我编写了一个demo在父组件中进行保持数据,然后在子组件中进行显示,我暑假保存成功了但是点击不同的列表项,显示的数据都是一样的好像没有更新,没有销毁,也没有重新加载,使用了钩子函数也不行。
父组件保持数据的方法
import { Avatar, List,Collapse } from 'antd';
import React, { useState } from 'react';
import { PlusCircleOutlined,SolutionOutlined,DeleteOutlined } from '@ant-design/icons';
import SolutionComponets from './SolutionComponets';
const handleSave = (formData) => {
const newAttributeData = { ...AttributeData, ...formData };
// 将新数据与旧数据合并,不替换旧数据
setAttributeData({...newAttributeData});
const newNode = {
title: (
<span>
{`${formData.newNodeName}`}
<DeleteOutlined onClick={(event) => handleDelete(`${formData.newNodeNo}-${formData.newNodeName}`, event)} />
</span>
),
value: `${formData.newNodeNo}-${formData.newNodeName}`, // 使用相同格式作为 value
children: [
{ title: `${formData.ProjecTtype}-${formData.Parentlevel} `, value: `${randomId}-1` },
{ title: <PlusCircleOutlined onClick={showModalForm} />, value: `${formData.newNodeNo}-${formData.newNodeName}-2`, children: [] }
]
};
setListData([...listData, newNode]); // 将新节点对象附加到现有列表数据中
setSelectedNode(newNode); // 将新节点设置为当前所选节点
};
子组件引用
return(
<div>
<SolutionComponets
visible={isModalOpenBaic} AttributeData={AttributeData}
onClose={handleCloseModalBasic}
/>
<List style={{width:'50%'}}
itemLayout="horizontal"
dataSource={listData}
renderItem={(item, index) => (
<Collapse bordered>
<Panel header={item.title} key={index}>
<List.Item.Meta
avatar={<Avatar src={`https://xsgames.co/randomusers/avatar.php?g=pixel&key=${index}`} />}
description="This is a solution project for generating Word documents"
/>
<PlusCircleOutlined onClick={showModalForm} style={{ marginLeft: '20px', marginRight: '10px' }} />
<SolutionOutlined onClick={showModalBaisc} />
</Panel>
</Collapse>
)}
/>
</div>
);
子组件
import { Drawer } from 'antd';
import React, { useState, useEffect } from 'react';
function SolutionComponents({ visible, onClose, AttributeData }) {
const handleCloseDrawer = () => {
onClose();
};
return (
<>
<Drawer title="窗体属性" visible={visible} placement="right" onClose={handleCloseDrawer}>
<p>{AttributeData ? AttributeData.newNodeNo : ''}</p>
<p>{AttributeData ? AttributeData.newNodeName : ''}</p>
<p>{AttributeData ? AttributeData.ProjecTtype : ''}</p>
<p>{AttributeData ? AttributeData.Parentlevel : ''}</p>
</Drawer>
</>
);
}
export default SolutionComponents;
我要实现点击不同列表展示不同列表数据