Javascript 如何取消所有订阅和异步任务?
在登录页面上输入creds后,我会被引导到预期页面,但控制台中会显示此错误。如果我理解正确的话,它是由Formik和组件未卸载引起的?我搜索过有类似错误的用户,但我似乎可以找到一个修复我的错误的方法Javascript 如何取消所有订阅和异步任务?,javascript,reactjs,axios,formik,Javascript,Reactjs,Axios,Formik,在登录页面上输入creds后,我会被引导到预期页面,但控制台中会显示此错误。如果我理解正确的话,它是由Formik和组件未卸载引起的?我搜索过有类似错误的用户,但我似乎可以找到一个修复我的错误的方法 import React,{useState,useffect}来自“React”; 从'formik'导入{Form,Field,withFormik}; 从“Axios”导入Axios; 从“是”以是的形式导入*; 导入“/signin.scss”; 常量符号=({错误、接触、值、状态})=
import React,{useState,useffect}来自“React”;
从'formik'导入{Form,Field,withFormik};
从“Axios”导入Axios;
从“是”以是的形式导入*;
导入“/signin.scss”;
常量符号=({错误、接触、值、状态})=>{
const[user,setUser]=useState([]);
//console.log(用户);
useffect(()=>{
如果(状态){
setUser([…用户,状态]);
}
},[用户,状态];
返回(
登录
用户名/电子邮件:
{toucted.username&&errors.username&{errors.username}}
密码:
{toucted.password&&errors.password&&{errors.password}}
登录
{user.map(用户=>(
{users.FirstName}您已成功登录
))}
);
};
常量FormikSignIn=带formik({
mapPropsToValues({username,password}){
返回{
用户名:用户名| |“”,
密码:密码| |“”
};
},
validationSchema:Yup.object().shape({
用户名:Yup.string().required('username is required'),
密码:Yup.string()
.required('需要密码')
.min(8,“密码太短-至少应为8个字符”。)
.matches(/[a-zA-Z]/,“密码只能包含拉丁字母”。)
}),
handleSubmit(值,{props,setStatus}){
console.log('表单提交',值);
轴心柱https://bw-how-to.herokuapp.com/login,价值观)
。然后(res=>{
//控制台日志(res);
如果(资源状态===200){
props.history.push(`/homepage`);
设置状态(恢复数据);
}
//resetForm();
})
.catch(err=>console.error('error',err.response));
}
})(签名);
导出默认FormikSignIn代码>我假设您正在使用React路由器?我认为您可以通过翻转setStatus
和props.history.push
来解决您的问题。发生的情况是,您正在导航到一个新页面,然后尝试设置状态。如果您先设置状态,然后导航,则应该解决该错误消息
handleSubmit(values, { props, setStatus }) {
console.log('Form submited', values);
Axios.post('https://bw-how-to.herokuapp.com/login', values)
.then(res => {
// console.log(res);
if (res.status === 200) {
setStatus(res.data);
props.history.push(`/homepage`);
}
// resetForm();
})
.catch(err => console.error('Error', err.response));
在这种情况下,可能可以完全忽略setStatus
,因为组件无论如何都要卸载?是的,我正在使用React路由器,翻转setStatus和props.history.push并尝试登录。没有错误!非常感谢。我会记住,状态需要先设定。事实上。基于这个问题,我不确定setStatus
是否是从父母那里传入的一个道具,其中可能包含它(例如:set jwt/user等)。因此,为什么我建议切换它们而不是忽略它们。