Javascript 将返回对象的函数转换为该对象的映射
要求 我有这个getValidationSchema`函数。我的任务需要将调用它的函数转换为对象的映射 类似于Javascript 将返回对象的函数转换为该对象的映射,javascript,reactjs,typescript,object,Javascript,Reactjs,Typescript,Object,要求 我有这个getValidationSchema`函数。我的任务需要将调用它的函数转换为对象的映射 类似于validationSchema[EDIT_INFO]=someSchema,并使用我的所有映射而不是函数调用它 export const validationSchemas = { ADD_USER: Yup.object().shape({ username: Yup.string('Provide a username').required('Username is r
validationSchema[EDIT_INFO]=someSchema
,并使用我的所有映射而不是函数调用它
export const validationSchemas = {
ADD_USER: Yup.object().shape({
username: Yup.string('Provide a username').required('Username is required'),
email: Yup.string().email('Provide a valid email address'),
password: Yup.string('Provide a password').required('Password is required'),
confirmPassword: Yup.string('Provide your password again')
.required('Password confirmation is required')
.oneOf([Yup.ref('password')], 'Passwords do not match'),
group: Yup.string('Please select a group').required('Group is required')
}),
EDIT_INFO: Yup.object().shape({
username: Yup.string('Provide a username').required('Username is required'),
email: Yup.string().email('Provide a valid email address'),
group: Yup.string('Please select a group').required('Group is required')
}),
EDIT_PASSWORD: Yup.object().shape({
password: Yup.string('Provide a password').required('Password is required'),
confirmPassword: Yup.string('Provide your password again')
.required('Password confirmation is required')
.oneOf([Yup.ref('password')], 'Passwords do not match')
})
};
以下是我到目前为止的功能:
const { mode } = this.props;
if (mode === ActionMode.EDIT_INFO) {
return validationSchemas.EDIT_INFO;
}
if (mode === ActionMode.EDIT_PASSWORD) {
return validationSchemas.EDIT_PASSWORD;
}
return validationSchemas.ADD_USER;
};
const mapValidationSchema: any;
validationSchemas[(validationSchemas.EDIT_PASSWORD, validationSchemas.EDIT_INFO,
validationSchemas.ADD_USER)] = this.mapValidationSchema;
validationSchema = {this.mapValidationSchema}
直到现在我都是这样调用函数的
validationSchema={this.getValidationSchemas}
这就是我到目前为止所做的:
const { mode } = this.props;
if (mode === ActionMode.EDIT_INFO) {
return validationSchemas.EDIT_INFO;
}
if (mode === ActionMode.EDIT_PASSWORD) {
return validationSchemas.EDIT_PASSWORD;
}
return validationSchemas.ADD_USER;
};
const mapValidationSchema: any;
validationSchemas[(validationSchemas.EDIT_PASSWORD, validationSchemas.EDIT_INFO,
validationSchemas.ADD_USER)] = this.mapValidationSchema;
validationSchema = {this.mapValidationSchema}
我显然做错了什么,因为我遇到了多个错误,表单验证无法工作。请注意,表单处于React和TS中
还有,我被要求这样做,但是你能解释一下为什么这比使用if语句的函数更好吗?除了看起来更干净之外,我想我看不出这有什么好处。如果你不知道答案,最好告诉我,如果你知道,这东西叫什么名字?那个图案有名字吗?或者在哪里可以找到一些信息?什么语法是
validationSchema={this.getValidationSchemas}
?你可以考虑在一个独立的环境中工作,这样其他人就可以更容易地处理这个问题。如果你不知道答案,最好告诉我,如果你知道,这个东西是怎么称呼的?那个图案有名字吗?或者在哪里可以找到一些信息?什么语法是validationSchema={this.getValidationSchemas}
?您可能会考虑提供一种在独立环境中工作的方法,这样其他人就可以更容易地在这个问题上工作。