【发布时间】:2021-10-08 01:58:39
【问题描述】:
动态我的意思是这个道具不会是相同的,这取决于我从哪里检查它。 比如我有这个钩子:
export const useErrorBorder = (fieldName: string) => {
const { formState: { errors } } = useFormContext()
const colors = { clean: 'blue.500', error: 'red.500' }
let showErrorBorder = colors.clean
if (errors && Object.keys(errors)?.length && fieldName) {
showErrorBorder = colors.error
} else {
showErrorBorder = colors.clean
}
if (!fieldName) {
showErrorBorder = 'inherit'
}
return showErrorBorder
}
我需要检查 fieldName 是否存在于来自 useFormContext 钩子的 formState 的 errors 对象中。
所以当我调用这个钩子时,我是这样使用的:
const handleErrorHook = useErrorBorder(
Object.keys(errors)?.length ? errors?.logic[conditionIndex]?.skipQuestionsSelect : '',
)
或者取决于我是否在另一个组件上调用它:
const handleErrorHook = useErrorBorder(
Object.keys(errors)?.length ? errors?.logic[conditionIndex]?.scenarios[scenarioIndex]?.operator : ''
)
<Comp focusBorderColor={handleErrorHook?.showErrorBorder || 'inherit'}` />
您注意到skipQuestionsSelect 不在scenarios 数组中。并且,当skipQuestionsSelect 或operator 为空时,它们将被移除其位置
那么避免这个错误的最佳解决方案是什么?
【问题讨论】:
-
你为什么不用
Object.keys(obj).includes('key')? -
您的错误是引用了您没有(完全)包含在问题中的代码?此外,即使屏幕截图看起来不错,(也)将您的错误包含在代码块中。
标签: javascript arrays reactjs typescript ecmascript-6