-
-
Notifications
You must be signed in to change notification settings - Fork 278
feat: Summary touched status #215
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
This pull request is being automatically deployed with Vercel (learn more). 🔍 Inspect: https://vercel.com/react-component/field-form/gkgamfjbt |
Codecov Report
@@ Coverage Diff @@
## master #215 +/- ##
=======================================
Coverage 99.89% 99.89%
=======================================
Files 13 13
Lines 921 931 +10
Branches 199 201 +2
=======================================
+ Hits 920 930 +10
Misses 1 1
Continue to review full report at Codecov.
|
发个 minor,antd 那边当做 patch 发。 |
记得留原始 issue,找了半天。 |
我建议
|
假设这个数据结构:
isFieldsTouched(['user'], false); // true,user 变了
isFieldsTouched(['user'], true); // true,所有字段(只有一个 user)变了
isFieldsTouched([['user', 'name']], false); // true,user.name 变了
isFieldsTouched([['user', 'name']], true); // true,所有字段(只有一个 user.name)变了
isFieldsTouched([['user', 'name'], ['user', 'age']], false); // true,user.name 变了
isFieldsTouched([['user', 'name'], ['user', 'age']], true); // false,user.name 变了,user.age 没变 |
这个有考虑过,想着如果用户想知道一个 List 下面是否所有 field 都 touch 过,那他只能遍历了。 |
遍历吧,至少 allTouched 语义还是保持原样吧,不然就多义了。 |
看看没问题我就合了~~ |
英文说不清,举例说明。
Case 1
如果有 2 个字段
user.name
和user.age
:isFieldsTouched(['user'], false)
返回true
,因为任意子节点变化都作为虚拟父字段变化isFieldsTouched(['user'], true)
返回false
,因为尚有子节点没有变化,传导给虚拟父节点也没有变化Case 2
如果是一个
List(name="user")
,包含两个槽位[a, b]
:isFieldsTouched(['user'], false)
返回true
,因为任意子节点变化都作为虚拟父字段变化isFieldsTouched(['user'], true)
返回false
,因为尚有子节点没有变化,传导给虚拟父节点也没有变化isFieldsTouched(['user'], false)
返回true
,因为 List 字段本身变化了isFieldsTouched(['user'], true)
返回false
,因为尚有子节点没有变化isFieldTouched
isFieldTouched
内部实现始终为isFieldsTouched([namePath], false)
。