Formik 是一个能让我们在 React 中非常方便的构建表单的 wrapper。
Formik 的作者并不推荐通过它来写一些 side effect,但总有实际需求摆在那里,不做是不行的。
在 issue 中讨论过后,作者放出了一个 FormikEffect,可以让我们在表单更新时,进行一些其他的操作。
比如实际生活中有一个阶梯价格的概念,一定数量内,是一个价格,超过的部分,是另外一个价格。
有这样一个表单:
{
count:"",
moneyToBePaid:""
}
当 count 给定时,需要根据具体的 count 来算出总费用并填入表单内。
这个时候就用到了 Effect,根据 prevValues 和 nextValues 来进行计算,并对相应的字段 setField。
需求进一步改成,用户认识柜台的人,可以打折,需要自己填费用。
这个时候你会发现自动计算的字段的 setField,也是会触发 onChange 的…
但是通过魔改,一样可以实现,可以说非常骚了。
具体可以去看 Formik 源码,应该会更好理解。
本人陷于项目不能自拔,暂时不做深究。