我有一个小功能,它可以查看当前可用资源的列表,当您创建和编辑资源时,它会检查资源名称的有效性(如果存在或不存在)。
以下是实用程序:
export const validateResourceName = value =>
listResources({ once: true }).then(({ data }) => {
if (Array.isArray(data) && data.find(resourceData => resourceData.name === value)) {
// eslint-disable-next-line no-throw-literal
throw 'Resource already exists';
}
});
现在,我希望仅在ADD_RESOURCE
上执行此操作。在EDIT_RESOURCE
上,它应引发此错误,而不检查当前正在编辑的资源名称。 Allowing to edit a resource without changing name
。
所以我创建了另一个函数,作为回报,它在我的组件验证道具中而不是常规的调用。
export const validateNonCurrentResourcepName = (value, currentResource) =>
listResources({ once: true }).then(({ data }) => {
if (
Array.isArray(data) &&
data.find(resourceData => resourceData.name === value) &&
data.map(resourceData => resourceData.name === currentResource)
) {
// eslint-disable-next-line no-throw-literal
throw 'Resource already exists';
}
});
我这样称呼它:
const debouncedValidateNonCurrentResourceName = debounce(validateNonCurrentResourceName, 250);
validate={inEditMode ? debouncedValidateResourceName : debouncedValidateNonCurrentResourceName}
但是它不起作用。另外,当我调用组件时,我同时传递了他的inEditMode
和currentResource
。我在这里做错什么了.. ??