Forms 苗条的定制商店不';不接受局部变量

Forms 苗条的定制商店不';不接受局部变量,forms,validation,store,svelte,yup,Forms,Validation,Store,Svelte,Yup,我正在尝试使用yup构建类似于Formik的东西,每个函数都可以工作,除了验证表单的函数 我使用的是最新版本的苗条(不是alpha) const createFormik=()=>{ 常量{subscribe,set,update}=可写({ 值:{}, validationSchema:{}, 错误:{} }); 常量验证=()=>{ 让newErrors={}; 更新(对象=>{ object.validationSchema.validate(object.values,{abortEar

我正在尝试使用yup构建类似于Formik的东西,每个函数都可以工作,除了验证表单的函数

我使用的是最新版本的苗条(不是alpha)

const createFormik=()=>{
常量{subscribe,set,update}=可写({
值:{},
validationSchema:{},
错误:{}
});
常量验证=()=>{
让newErrors={};
更新(对象=>{
object.validationSchema.validate(object.values,{abortEarly:false})
.catch(错误=>{
errors.inner.forEach(错误=>{
newErrors={…newErrors[error.path]:error.errors}
});
});
返回{…对象,错误:newErrors};
})
}
返回{
订阅
更新,
setInitialValues:(initialValues)=>update(n=>({…n,值:initialValues})),
setValidationSchema:(validationSchema)=>update(n=>({…n,validationSchema:validationSchema})),
setErrors:(errors)=>update(n=>({…n,errors:errors})),
validateSchema:()=>validate(),
updateFieldValue:(名称,值)=>update(n=>({…n,值:{…n.values,[名称]:值}}))
}
}

更新不会用匹配的错误更新存储中的errors对象,而是返回空的errors对象。

正如Rich Harris所说,问题是,我在更新函数中使用了promise。 在承诺后更新或在承诺内解决它


常量createFormik=()=>{
常量{subscribe,set,update}=可写({
值:{},
validationSchema:{},
错误:{}
});
常量验证=(对象)=>{
让newErrors={};
object.validationSchema.validate(object.values,{abortEarly:false})
.catch(错误=>{
errors.inner.forEach(错误=>{
newErrors={…newErrors[error.path]:error.errors}
});
console.log(对象);
更新(n=>({…n,错误:newErrors}));
});
更新(n=>({…n,错误:{}}));
}
返回{
订阅
更新,
setInitialValues:(initialValues)=>update(n=>({…n,值:initialValues})),
setValidationSchema:(validationSchema)=>update(n=>({…n,validationSchema:validationSchema})),
setErrors:(errors)=>update(n=>({…n,errors:errors})),
validateSchema:(对象)=>验证(对象),
updateFieldValue:(名称,值)=>update(n=>({…n,值:{…n.values,[名称]:值}}))
}
}
验证(…)是否返回承诺?根据
.catch
,它看起来是这样的-在这种情况下,您的
errors.inner.forEach
代码在返回新对象后运行。您可能需要验证,然后调用
update
函数(同步调用其参数)