ProComponents——ProForm,设置初始值后,点击【重置】按钮,值已清除但页面未更新

news/2024/9/24 13:42:42

 我的问题

umi+antd,使用ProComponents的QueryFilter表单进行列表筛选,首页有个进入列表的快捷跳转,会筛选列表状态(在线1/离线0)。

设置筛选状态初始值为1后,点击【重置】按钮:

1.打印初始值1已清除,但页面上未更新,仍显示筛选在线状态

2.点击2次【重置】按钮,页面才会更新

3.点击下拉框的清除按钮,再点击【重置】按钮,初始值会又变为1

 

首页:

...
<Link to={'/list?status=1'}>列表</Link>
...

 

列表:

 import { useSearchParams } from '@umijs/max'
 ...
const [params] = useSearchParams()
  const status = params.get('status') ? Number(params.get('status')) : undefined
...
<FilterForminitStatus={status}onSubmit={e => {setSearchParams({...searchParams,...e,})}} /> ...

 

 

筛选组件:

import { ProFormSelect, ProFormText, QueryFilter } from '@ant-design/pro-components'export type FilterFormType = {name?: stringstatus?: number
}
interface IFilterFormProps {initStatus?: numberonSubmit?: (e: FilterFormType) => voidonReset?: VoidFunction
}export default function FilterForm(props: IFilterFormProps) {const { initStatus, onSubmit, onReset } = propsreturn (<QueryFilter<FilterFormType>onFinish={async values => {onSubmit?.(values)}}onReset={onReset}initialValues={{ status: initStatus }}omitNil={false} // 默认为true,会自动清空 null 和 undefined 的数据。解决手动清除下拉框后,查询参数里下拉选项仍存在问题><ProFormText name='name' label='名称' placeholder='名称' /><ProFormSelectname='status'label='状态'options={[{ label: '离线', value: 0 },{ label: '在线', value: 1 },]}/></QueryFilter>
  )
}

 

 

原因

官网说明:https://ant.design/components/form-cn

 

解决方法

使用formRef、setFieldValue和resetFields

import {ProFormInstance,ProFormText,QueryFilter,
} from '@ant-design/pro-components'
import { useEffect, useRef } from 'react'export type FilterFormType = {name?: stringstatus?: number
}
interface IFilterFormProps {initStatus?: numberonSubmit?: (e: FilterFormType) => voidonReset?: VoidFunction
}export default function FilterForm(props: IFilterFormProps) {const { initStatus, onSubmit, onReset } = propsconst formRef = useRef<ProFormInstance>()useEffect(() => {formRef.current?.setFieldValue('status', initStatus)}, [])return (<QueryFilter<FilterFormType>formRef={formRef}onFinish={async values => {onSubmit?.(values)}}onReset={() => {onReset?.()formRef.current?.resetFields() // 解决重置后,页面上初始化值未清空问题
      }}labelWidth='auto'omitNil={false} // 默认为true,会自动清空 null 和 undefined 的数据。解决手动清除下拉框后,查询参数里下拉选项仍存在问题><ProFormText name='name' label='名称' placeholder='名称' /><ProFormSelectname='status'label='状态'options={[{ label: '离线', value: 0 },{ label: '在线', value: 1 },]}/></QueryFilter>
  )
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/56917.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Rust 中的关键字以及示例

Rust 中的关键字、保留字以及对应的示例1. 常见关键字as: 用于类型转换,例如将一个值从一种类型转换为另一种类型。let x: i32 = 42; let y: u8 = x as u8;break: 用于提前退出循环。for i in 0..10 {if i == 5 {break;} }const: 定义一个常量,常量的值在编译时就确定,不会在…

跨域——应对浏览器同源策略的一种方案

理解跨域,首先需要理解同源策略 (Same origin policy)。 何为源origin

LigerUI 中的 Grid (ligerGrid) 合并单元格

在网上搜索了很都都没有正确的方法实现 合并单元格, LigerGrid 不像 EasyUI 中的 Grid 可以直接 合并单元格。 我化了点时间,解决了, 就分享给大家, 我就不做详细的注释, 只有有一定基础的都可以看懂, 菜鸟就自己去补习吧。<div id="maingrid" style="…

linux系统下各种日志文件的介绍,查看,及日志服务配置

转载于https://zhuanlan.zhihu.com/p/298335887 ,侵权删! linux系统日志文件的详细介绍 日志文件的作用 日志文件用于记录linux系统的各种运行信息的文件,相当于linux主机的日记,不同的日志文件记载了不同类型的信息,如Linux内核消息、用户登录事件、程序错误等。. 日志文件…

金融保险行业ITSM案例分析报告

一、 项目背景 随着金融保险行业竞争的日益激烈以及信息技术的快速发展,数字化转型已成为企业发展的必由之路。然而,许多金融机构的信息中心仍然面临“重建设轻运维”的问题,即在信息化基础设施建设投入巨大之后,后续的运维管理却未能跟上步伐,导致信息化支撑力量薄弱。这…

maven项目中引入本地jar包配置

服务在本地可以正常运行,打包后放在服务器就无法运行,原来是引入的本地jar包maven没有打包上去 首先jar包是放在资源目录下的lib里pom文件在引入时指定jar包的路径,maven引入不会报错,但是打包后没有这个jar包<dependency><groupId>com.sun.jna.examples</g…

在stable diffussion中控制生成图片的光线Kj

合集 - AIGC(27)1.轻松复现一张AI图片04-222.Stable Diffusion中的常用术语解析04-233.Stable diffusion中这些重要的参数你一定要会用04-244.Stable Diffusion中的embedding04-255.怎么使用Stable diffusion中的models05-286.Stable Diffusion WebUI详细使用指南05-297.Stable…