You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Formik中调用Axios Get接口如何实现可选参数传递

问题核心原因

  1. 你的Axios传参写法错误:params: { values }会将所有表单参数嵌套在values字段下,和你原本预期的平级传参逻辑不符,后端无法正常解析单个字段。
  2. 访问values.certificateNo报错一般是两个原因:要么你没有给Formik配置对应字段的初始值,要么你给values标注的any类型没有生效/实际字段未定义。

具体解决步骤

1. 实现空参数过滤逻辑

复用你之前的过滤规则,只保留非空参数,你可以写一个通用的过滤函数处理Formik返回的values:

// 可根据业务调整过滤规则,当前是过滤掉undefined、null、空字符串
const filterEmpty = (obj: Record<string, any>) => {
  return Object.fromEntries(
    Object.entries(obj).filter(([_, val]) => val != null && val !== '')
  )
}

2. 修正提交函数写法

// 先给values定义明确的字段类型,替代any,避免属性访问报错
interface FormValues {
  certificateNo?: string
  protoColNo?: string
  requestStatus?: string
  sponser?: string
  country?: string
  noOfSubjects?: number
  startDate?: string
  endDate?: string
}

const handleSubmit = async (values: FormValues) => {
  // 过滤空参数
  const params = filterEmpty(values)
  // 直接把处理后的参数传给params,不要额外嵌套
  const { data } = await axios.get('http://localhost:3000/api/certificates', {
    params
  })
  console.log(data)
  setResponse(data.data)
  alert(JSON.stringify(data))
}

3. 检查Formik初始化配置

确保你初始化Formik的时候给所有字段都配置了初始值,避免属性访问时报未定义的错误:

import { useFormik } from 'formik'

const formik = useFormik({
  initialValues: {
    certificateNo: '',
    protoColNo: '',
    requestStatus: '',
    sponser: '',
    country: '',
    noOfSubjects: undefined,
    startDate: '',
    endDate: ''
  } as FormValues,
  onSubmit: handleSubmit
})

做完以上三步后,你既可以正常通过values.字段名访问单个参数,也能实现仅非空参数被带入请求的逻辑。


内容的提问来源于stack exchange,提问作者Shruti sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 04:06:10