reactjs - 带有formik和yup的对象数组的Formik验证/错误
问题描述
我有一个表格,里面有一个数字网格。例如,每一行有四个值,我们有几行。在我的 initialValues 中,我将它们设置为:
interface Row {
value1: number,
value2: number,
// ...etc
}
interface InitialValuesInterface {
grid: Row[];
}
const initialValues: InitialValuesInterface = {
grid: [...Array(6).keys()].map((row, index) => ({
value1: 100,
value2: 200,
// ... etc
})),
...otherValues
}
所以我们有一个包含 6 个对象的数组,每个对象有 4 个命名值。在我的验证中,我要求是的来验证表单的这一部分,如下所示:
const validationSchema = Yup.object().shape({
grid: Yup.array().of(
Yup.object().shape({
value1: Yup.min(100, "Must be at least 100").etc(),
value2: Yup.min(200, "Must be at least 200").etc(),
// ...etc
})
)
})
在我的反应组件中,我记录了每次重新渲染的错误。使用formikProps = useFormikContext()
,我可以得到formikProps.errors
,当我测试这些错误时,我在控制台中看到一个错误对象,看起来与预期的一样:
// console.log(formikProps.errors) after triggering an error in the third row, second cell
{
grid: Array(3)
2:
value2: "Must be at least 200"
}
按预期工作。但是,尝试在我的组件中访问此错误以进行错误处理(我想有条件地为任何给定的错误单元格呈现带有工具提示的错误图标),我遇到了错误。
{formikProps.values.grid.map((row, ind) => (
<TableCell>
<input
type="number"
name="[${ind}].value2"
onChange={formikProps.handleChange}
/>
{formikProps.errors.grid[ind].value2 && // <-- problem here
<SomeErrorIconWithMessage />
}
</TableCell>
))}
打字稿根本不喜欢这个。首先它告诉我该对象可能是未定义的。我不能这样做formikProps.errors.grid?[ind].value2
,因为打字稿认为我正在启动一个三元运算符,当我想要条件检查时(即formikProps.errors?.grid
- 工作正常)。我也试试这个(非常难看):
{formikProps.errors.grid &&
formikProps.errors.grid[ind] &&
formikProps.errors.grid[ind].value2 &&
(<SomeErrorIconWithMessage />)
}
但后来我得到一个 ts 错误说
Property 'value2' does not exist on type 'string | FormikErrors<Row>'.
Property 'value2' does not exist on type 'string'.
问为什么打字稿假设这可能是一个字符串,而我的validationSchema专门将它键入为一个Row
对象数组?我可以强制打字稿将其视为Row
类型吗?
解决方案
推荐阅读
- ios - UITableViewCell 中两个基本相同的 UILabel 的奇怪约束差异
- spring - @Autowired 在 Spring 组件中无法正常工作
- android - 当我滚动它们时,回收器视图会交换项目
- scala - 如何在 Scala 中转换字符串格式
- javascript - 如何通过更改面板名称来更新 div 内容
- codeigniter - 未找到 Codeigniter 页面 - 迁移到 Live Server
- python - 从另一个目录导入文件
- javascript - 使用唯一键合并数组
- ruby-on-rails - ActionController::UrlGenerationError: 没有路由匹配 {:action=>"index", :controller=>"api/v1/topics", :format=>:json}
- ios - 如何使用 ARCamera 的投影矩阵去歪斜图像?