【发布时间】:2021-01-30 17:34:06
【问题描述】:
我是新手,我遇到了 useState 钩子的问题。我有一个来自(使用useForm),我想要实现的是当用户单击提交按钮时,它会将表单数据发送到api并从api收集响应然后更新状态并将更新后的状态作为url重定向中的参数发送(道具。历史.push)。 我唯一坚持的是我的 useState 钩子在第一次点击时没有更新。我发现了类似的问题,但并没有解决我的问题,或者有人说我不太了解它,请帮助。
import React, {useState, useRef, useCallback, useEffect} from 'react'
import {useForm} from 'react-hook-form'
import CreateProcessComponent from '../../components/ProcessComponents/CreateProcess/CreateProcessComponent.jsx'
import {createProcessApiCall} from '../../services/ProcessService'
function postData (dt, err, param){
var new_param = JSON.stringify(param)
const result = createProcessApiCall(new_param)
.then(response => {
dt(response.data.data)
console.log(response.data.data)
})
.catch(e => {
console.log(e)
err(true)
})
}
export default function CreateProcessContainer(props){
const {register, handleSubmit, errors} = useForm()
const [postApiData, setApiData] = useState({})
const [isError, setIsError] = useState(false);
const sendRequest= (data) => {
let prm = {"ProcessName":data.processName,"ProcessDescription":data.processDescription,"Code":"null", "CreatedBy":"null"}
postData(setApiData, setIsError, prm)
props.history.push({pathname:'/test',state:{postApiData}})
}
return (
<main>
{isError && <div>Something went wrong ...</div>}
{ (!isError) ?
<CreateProcessComponent
register={register}
handleSubmit={handleSubmit}
errors={errors}
onSubmit={sendRequest}/>
:
null }
</main>
)
}
在上面的代码中 CreateProcessComponent 是我的表单。请让我知道我做错了什么以及我需要添加哪些修复
【问题讨论】:
-
哪个
useState没有更新?其中有 4 个。什么被点击?我在您的代码 sn-p 中看不到onClick处理程序。我的猜测是外壳中的陈旧状态。sendRequest是否传递给多个子组件?如果不是,那么我怀疑它需要被记忆。 -
代码有点复杂。只需一个处理程序 sendRequest 即可简化,无需记忆。要调试您的问题,请尝试在 createProcessApiCall(new_param) 的 .then 处设置断点,看看它是否甚至到达那里。如果到达,请检查 dt 回调是否已执行。可能会放一个临时的 useEffect 来查看 postApiData 是否更新。
-
@DrewReese 我正在更新状态 postApiData。在我尝试 console.log(postApiData) 的 sendRequest 中,我得到了空钩
-
@KevinMoeMyintMyat 数据在第二次单击按钮时得到更新,是的,它正在到达 createProcessApiCall(new_param),我正在从 API 获得响应
-
@KevinMoeMyintMyat 请告诉我如何简化我的代码
标签: reactjs