react,antd,typescript
为什么在Modal.confirm后,前面update()方法设置的值没有成功,在getRow()方法里面获取的还是原来的值
import { Button, Modal } from 'antd';
import React, { useState, useEffect, useRef } from 'react';
function PageComponent() {
const [person, setPerson] = useState({
age: "1",
name: "张三"
});
const msgDialog = async (msg: string, bShowCanBtn: boolean = true):Promise<{modal : ReturnType<typeof Modal.confirm> , status : true | false}> => {
return new Promise((resolve, reject) => {
const modal = Modal.confirm({
title: "test",
content: <h4>{msg}</h4>,
closable: true,
okText: "确定",
cancelText: "取消",
cancelButtonProps: { style: { display: bShowCanBtn == false ? "none" : "inline" } },
centered: true,
onOk() {
resolve({modal , status : true});
},
onCancel() {
resolve({modal , status : false});
},
})
})
};
const cmd_update = async () => {
let instance = await msgDialog('是否更新?')
if(!instance?.status) {
instance?.modal.destroy();
return;
}
await update();
let retInstance = await msgDialog('成功登录!', false);
if(!retInstance?.status) {
retInstance?.modal.destroy();
return;
}
await getRow();
}
const update = async () => {
const obj = {age: "2", name: "李四"};
setPerson((form) => ({ ...form, ...obj }));
};
const getRow = async () => {
console.info("getRow=", person.age, person.name)
};
useEffect(() => {
console.info("useEffect=", person.age, person.name)
getRow();
}, [person.age, person.name]);
return (
<div>
<Button onClick={cmd_update}>更 新</Button>
</div>
);
}
export default PageComponent;
怎么样才能在getRow方法里面获取update()方法里面设置的值?
这是闭包引起的,我只说解决方案。我给你提供三种。
1: 是使用 useEffect
2:更新函数返回 更新后的状态
3: 利用 useRef 这个我不多赘述了,不怎么推荐。
你的这个弹框业务的复杂度不高的话 可以使用 update 不用重复生成弹框实例