在子组件中编写了一个窗体进行输入数据的操作,在父组件中进行引用,然后进行数据保存的操作
这个组件是采用的树形组件,点击树形组件中的加号标签弹出这个子组件窗体输入数据,然后点击保存,把这些数据传递给父组件,在父组件中进行保存,把保存的数据以新建一个新的节点追加到这个加号标签下。
子组件
function FormComponets({ visible, onClose,onSave }){
const [FormName, setFormName] = useState('');
const [ObjectName, setObjectName] = useState('');
const [form] = Form.useForm();//Form.useForm()生成了一个form实例,并将其绑定到了Form组件上
const onFinish = (values,value,node) => {
onSave(values, value, node); // 将表单数据、value和node传递给父组件进行保存
// visible(false); // 关闭Modal
form.setFieldsValue(values);
form.resetFields(); //清空表单数据
};
return (
<div>
<Modal title="定义窗体信息" visible={visible} onCancel={onClose} footer={null}>
<Form form={form}
onFinish={onFinish}
>
<Form.Item
label="form name"
name="FormName"
rules={[{ required: true, message: 'Please enter the scheme name!' }]}
>
<Input type="text" style={{ width: '80%' }} placeholder="Please enter the form name"
value={FormName} onChange={e => setFormName(e.target.value)}
/>
</Form.Item>
</Form>
</Modal>
</div>
);
}export default FormComponets
父组件
function TreeComponets(){
const [treeData, setTreeData] = useState([]);// 初始化树形数据
const FormSave = (data,value,node,setTreeData) => {
onSave(data, value, node); // 将setTreeData函数作为参数传递给onSave函数
debugger
const randomId = `SL-${Math.floor(Math.random() * 1000000)}`;
const newNode = {
title: data.FormName,
value: randomId,
key: randomId, // 添加key属性
onClick: () => showModalBaisc(),
children: [
{ title: `${data.ObjectName}`, value: `${randomId}-2`},
{ title: `${data.EnglishName}`, value: `${randomId}-3` }
]
};
// 找到目标节点并添加新的子节点
let newData = [...treeData];
const addDataToNode = (data, nodeId, newData) => {
for (let i = 0; i < data.length; i++) {
const item = data[i];
if (item.value === nodeId) {
item.children.push(newData);
break;
} else if (item.children && item.children.length > 0) {
addDataToNode(item.children, nodeId, newData);
}
}
};
const newNodeData = {
title: value,
value: Math.random().toString(36).substr(2, 9),
children: []
};
addDataToNode(newData, node, newNodeData);
setTreeData([...treeData]);
setIsModalOpenForm(false);
// 将要传递给BasicDrawer子组件的数据赋值给basicData状态变量
setBasicData({ ...data, nodeId: randomId });
};
return(
<div>
<TreeSelect {...tProps} onSelect={onSelect} treeData={treeData} />
<FormComponets
visible={isModalOpenForm}
onClose={handleCloseModal}
onSave={(data, value, node) => FormSave(data, value, node, setTreeData)}
treeData={treeData}
setTreeData={setTreeData} // 确保将setTreeData函数作为属性传递给FormComponets
/>
</div>
);
}
export default TreeComponets;
以上是部分人的代码我在进行sava保存的时候出错了