Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.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
Javascript 将返回对象的函数转换为该对象的映射_Javascript_Reactjs_Typescript_Object - Fatal编程技术网

Javascript 将返回对象的函数转换为该对象的映射

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

要求 我有这个getValidationSchema`函数。我的任务需要将调用它的函数转换为对象的映射

类似于
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}
?您可能会考虑提供一种在独立环境中工作的方法,这样其他人就可以更容易地在这个问题上工作。