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>

  

 

posted @ 2024-03-29 17:32  信铁寒胜  阅读(13)  评论(0编辑  收藏  举报