遇到问题:
无法在多个集合的情况下实现数据绑定,并且不同的集合之间不相互影响。
实现效果:
无论新建的多少个集合,都可以进行数据绑定,并且在绑定不同的数据源的时候多个集合之间不会相互影响。
以下是部分代码以及详细的过程描述:
父组件代码用于打开子组件
function ListTreeComponets(){
//这个方法就是打开子组件的
const showModallocaDoument=(data,index)=>{
setSolutionNo(index); // 增加 key 的值,触发子组件重新渲染
setisopendocmentdw(true);
}
//引用子组件
<IndocmentComponets
isopen={isopendocmentdw}
onClose={handleCloseModaldo}
SolutionNo={SolutionNo}
/>
}export default ListTreeComponets;
子组件绑定数据源并进行展示
function IndocmentComponets(props){
const {
isopen,
onClose,
SolutionNo
}
=props;
//数据源赋值给table并进行展示数据
useEffect(() => {
debugger
if (!basicMeta) {
setColumntwoData([]);
return;
}
debugger
setColumntwoData(
basicMeta.map((row, index) => ({
key: index.toString(),
table_name: row.table_name,
attributes: row.attributes,
en_name: row.en_name,
zh_name: row.zh_name,
fields: row.fields,
length: row.length,
name: row.name,
type: row.type,
}))
);
debugger
console.log("读取到的数据源信息:",columntwoData)
}, [basicMeta]);
// 读取api接口数据部分 这里就是获取数据的方法
此处会把绑定数据后会根据父组件传递过来的SolutionNo这个唯一值
追加到这个集合里面用于区分打开的是哪一个集合。
const docMetaSave = (formData, index) => {
debugger
const updatedFormData = formData.map((data) => ({
[formattribute.SolutionNo]: [
{
...data,
SolutionNo: formattribute.SolutionNo
}
]
}));
setBasicMeta(updatedFormData);
console.log('追加后的from数据', updatedFormData);
};
const gettabeldata=()=>{
setisModalOpenMeta(true);
}
//引用绑定数据源来源组件
<MedataComponets
isopen={isModalOpenMeta}
onClose={handleCloseModalMeta}
onSave={(formData) => docMetaSave(formData)}
/>
//table
{columntwoData.length > 0 && (
console.log('dataSource', columntwoData),
<Table dataSource={columntwoData} columns={columntwo} key={SolutionNo} />
)}
//单击按钮获取数据源
<Button type="primary" htmlType="default" onClick={gettabeldata}>
获取数据源
</Button>
}export default IndocmentComponets
流程描述:
1.在父组件中点击父组件中标签打开绑定数据源的子组件。
2.在绑定数据源的子组件中点击获取数据源按钮,打开获取数据源的子组件。
3. 通过docMetaSave方法接收获取到的数据源并进行赋值。
4. 通过useEffect加载方法把数组setBasicMeta中的数据赋值给columntwoData。
5. 在table控件中使用columntwoData作为table的数据源最终进行展示。
所遇问题:
- 当新建第一个集合集合1并进行数据绑定的时候,假设这里绑定的数据表是:PushTable,我再次进行新建一个集合的时候打开,这个时候这个新建的为集合2,打开后展示的效果为集合1的数据,没有区分开,此时我的集合2还没有进行数据绑定也显示了出来。
- ```c#
```这一段代码不管绑定的数据源是什么的样,但是始终为共用的同一个table,要么会继承要么就是会进行覆盖的操作。
流程描述图:
目前新建集合和获取数据源这一块是没有问题的,现在需要在进行数据绑定的时候想个办法进行区分开来,因为我的集合是动态新建的不是固定的,我有尝试过使用key,和数据筛选这些办法都行不通,主要的问题还是在于绑定数据的
时候table中的数据源始终都是共用的。
数据源格式如下: