Antd 没有重新渲染的问题
1、
export function CreateMaterialButton(props) {
const revisionType = props.revisionType //SW8_PARTRevision 还是 SW8_ProductRevision
const getTableData = props.getTableData
const [basicPropertyFields, setBasicPropertyFields] = useState([]);
const [loading, setLoading] = useState(false);
const [twoLevelOptions, setTwoLevelOptions] = useState([]);
const [testOptions, setTestOptions] = useState([]);
console.log("CreateMaterialButton loading......");
useEffect(() => {
console.log("initUIData start...");
initUIData(revisionType,setBasicPropertyFields,twoLevelOptions,setTwoLevelOptions)
},[])
return <>
<ModalForm
title={props.name}
trigger={
<Button type="primary">
{props.name}
</Button>
}
width= {1100}
autoFocusFirstInput
modalProps={{
onCancel: () => console.log('run'),
bodyStyle: { height: 450, overflow: 'auto' }, // 设置 body 的高度为300,并添加滚动条
}}
onFinish={async (values) => {
//await waitTime(2000);
setLoading(true)
try{
const result = await createOkClick(revisionType,values,getTableData)
return result;
}catch(error){
console.log("error = ",error);
message.error(error.message)
return false
}finally{
setLoading(false)
}
}}
centered="true"
submitter={{
render: (props, defaultDoms) => {
console.log("测试");
const newButtonArr = []
newButtonArr.push(<Button
key="check"
onClick={() => {
}}
>
校验
</Button>)
newButtonArr.push(defaultDoms[1])
newButtonArr.push(defaultDoms[0])
return newButtonArr
}
}}
loading={loading}
>
<IntervalDiv name="校验属性"/>
<ProForm.Group>
<ProFormText width="md" name="company" label="品牌" placeholder="请输入相关信息" />
<ProFormText width="md" name="company" label="规格型号" placeholder="请输入相关信息" />
</ProForm.Group>
<IntervalDiv name="基础属性"/>
<ProForm.Group>
{basicPropertyFields}
</ProForm.Group>
<IntervalDiv name="分类属性"/>
<ProForm.Group>
<ProFormText width="md" name="contract" label="直径" placeholder="请输入相关信息" />
<ProFormText width="md" name="contract" label="材质" placeholder="请输入相关信息" />
<ProFormText width="md" name="contract" label="规格型号" placeholder="请输入相关信息" />
</ProForm.Group>
<IntervalDiv name="相关文件"/>
<ProForm.Group>
<ProFormSelect
//options={[{value: 'JT文件',label: 'JT文件'},{value: '认证文件',label: '认证文件'}]}
options={testOptions}
width="sm"
name="useMode"
label="文件类型"
showSearch
/>
<ProFormUploadButton
extra="支持扩展名:.rar .zip .doc .docx .pdf .jpg ..."
label="附件"
name="file"
title="上传文件"
/>
</ProForm.Group>
<Button onClick={()=>{
console.log("setTestOptions start......");
setTestOptions[[{ label: 'New Option', value: 'new' }]]
console.log("setTestOptions end......");
}}>测试</Button>
</ModalForm>
</>
}
1、问题:执行完setTestOptions[[{ label: 'New Option', value: 'new' }]]后,
没有执行console.log("CreateMaterialButton loading......"); 重新渲染
2、解决办法(ChatGpt)
看起来你想要在 ProFormSelect 组件中重新初始化下拉选项。根据你的代码,你可以通过在点击按钮时更新 testOptions 状态来实现这一点。在你的代码中,测试按钮的点击事件已经尝试更新 testOptions 状态,但是有一点小问题。在更新状态时,应该使用 setTestOptions 方法,而不是 setTestOptions[[...]]。
下面是修改后的代码:
<Button onClick={()=>{
console.log("setTestOptions start......");
setTestOptions([{ label: 'New Option', value: 'new' }]); // 使用正确的语法更新下拉选项状态
console.log("setTestOptions end......");
}}>测试</Button>

浙公网安备 33010602011771号