我正在使用Formik创建一个表单.我按照以下模式创建了我的表单:

现在我想使用useParams react钩子(https://reach.tech/router/api/useParams)的结果作为onSubmit函数的输入.

这是Formik文档的提交部分:

onSubmit={async (values) => {
    await new Promise((r) => setTimeout(r, 500));
    alert(JSON.stringify(values, null, 2));
  }}

我试着加上这句话:

onSubmit={async (values) => {
    await new Promise((r) => setTimeout(r, 500));
    const myValue = useParams()["myParam"]
    alert(JSON.stringify(values, null, 2));
  }}

其中useParams是从"react router dom"导入的

但这给了我一个错误:

我是新手,不知道如何从这里开始.如何在onSubmit函数中获得myParam的值?

推荐答案

正如错误所提到的,您应该在组件级别调用useParams(),而不是在回调(或非组件)中调用useParams().

你可以再次判断this document中的示例

import { useParams } from "@reach/router"

// route: /user/:userName
const User = () => {
  const params = useParams(); //on the top of `User` component

  return <h1>{params.userName}</h1> //SHOULD NOT CALL `useParams` IN ANY CALLBACKS HERE
)

根据你的代码,正确的方法应该是

//I assume that `onSubmit` is in `Form` component
const Form = () => {
  const { myParam } = useParams() //you should call your `useParams` on the component level

  return <button onSubmit={async (values) => {
    await new Promise((r) => setTimeout(r, 500));
    const myValue = myParam //replace for `useParams` 
    alert(JSON.stringify(values, null, 2));
  }}>
}

Javascript相关问答推荐

如何在不指定宽度和高度的情况下显示来自网址的下一张图像

nPM审计始终发现0个漏洞

如何让\w token 在此RegEx中表现得不贪婪?

如何在不分配整个数组的情况下修改包含数组的行为主体?

如何为GrapesJS模板编辑器创建自定义撤销/重复按钮?

GrapeJS -如何保存和加载自定义页面

在nextjs服务器端api调用中传递认证凭证

函数返回与输入对象具有相同键的对象

如何添加绘图条形图图例单击角形事件

cypress中e2e测试上的Click()事件在Switch Element Plus组件上使用时不起作用

如何根据当前打开的BottomTab Screeb动态加载React组件?

如何强制Sphinx中的自定义js/css文件始终加载更改而不缓存?

使用Java脚本导入gltf场景并创建边界框

覆盖TypeScrip中的Lit-Element子类的属性类型

WP Bootstrap NavWaker:下拉菜单一次打开所有下拉菜单

如何在和IF语句中使用||和&;&;?

需要RTK-在ReactJS中查询多个组件的Mutations 数据

为什么这个最小Angular 的Licial.dev设置不起作用?

使用Library chart.js在一个带有两个y轴的图表中绘制两个数据集

当达到高度限制时,如何裁剪图像?使用html和css