Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 获取并使用响应更改React中的状态_Reactjs_Formik - Fatal编程技术网

Reactjs 获取并使用响应更改React中的状态

Reactjs 获取并使用响应更改React中的状态,reactjs,formik,Reactjs,Formik,我想根据PUT请求的响应使用更改组件的状态 尤其是当PUT的响应不成功时,例如500响应的情况 以下示例是表单中的一个示例。当用户提交表单时,它应该发出一个PUT 如果满足PUT响应,则应重置表单。否则什么也不会发生,用户应该可以重试 /MyForm.jsx 从“React”导入React; 从“道具类型”导入道具类型; 从“react-refetch”导入{PromiseState}; 从“Formik”导入{Formik,Form,Field,ErrorMessage}; 从“/ResetO

我想根据PUT请求的响应使用更改组件的状态

尤其是当PUT的响应不成功时,例如500响应的情况

以下示例是表单中的一个示例。当用户提交表单时,它应该发出一个PUT

如果满足PUT响应,则应重置表单。否则什么也不会发生,用户应该可以重试

/MyForm.jsx

从“React”导入React;
从“道具类型”导入道具类型;
从“react-refetch”导入{PromiseState};
从“Formik”导入{Formik,Form,Field,ErrorMessage};
从“/ResetOnSuccess”导入ResetOnSuccess;
常量MyForm=({settingsPut,settingsPutResponse})=>{
常量submitForm=(值,formik)=>{
设置SPUT(真);
//在这里,它应该获取设置SPUTResponse,
//然后,仅在成功的情况下执行以下操作:
//
//resetForm({values});
//滚动到(0,0);
};
返回(
{({dirty})=>(
提交
{settingsPutResponse&&settingsPutResponse.rejected&&(

请重试

)} )} ); }; MyForm.propTypes={ 设置提示:需要PropTypes.func, 设置响应:PropTypes.instanceOf(PromiseState) }; MyForm.defaultProps={ userSettingsPutResponse:null }; 导出默认MyForm;
通过创建一个组件,我可能有一个解决方案:

/ResetOnSuccess.jsx

import React,{useffect,useState}来自“React”;
从“formik”导入{useFormikContext};
从“道具类型”导入道具类型;
从“react-refetch”导入{PromiseState};
const ResetOnSuccess=({settingsPutResponse})=>{
常量{values,resetForm}=useformicContext();
const[success,setSuccess]=使用状态(false);
useffect(()=>{
如果(设置SPUTResponse&&settingsPutResponse.Completed){
设置成功(true);
}
},[settingsPutResponse]);
//只有满足settingsPutResponse后,才会重置表单
如果(成功){
resetForm({values});
滚动到(0,0);
设置成功(假);
}
返回null;
};
ResetOnSuccess.propTypes={settingsPutResponse:propTypes.instanceOf(PromiseState)};
ResetOnSuccess.defaultProps={settingsPutResponse:null};
导出默认重置成功;
然后在/MyForm.jsx中添加重置组件:


{({dirty})=>(
//等等。。。
但由于它是一个返回“null”的组件,这感觉有点像反模式

有更好的办法吗


我在这里创建了一个代码沙盒示例:

使用组件生命周期方法getDerivedStateFromProps。它在组件收到新的props后调用。示例:-静态getDerivedStateFromProps(nextProps,prevState){if(nextProps.someValue!==prevState.someValue){return{someState:nextProps.someValue};}else return null;}getDerivedStateFromProps生命周期方法只能在类组件中使用。在函数组件中,这将在useEffect中处理,对吗?是的@Remi,我错过了。