Skip to content

Conversation

zombieJ
Copy link
Member

@zombieJ zombieJ commented Nov 6, 2020

英文说不清,举例说明。

Case 1

如果有 2 个字段 user.nameuser.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)

@vercel
Copy link

vercel bot commented Nov 6, 2020

This pull request is being automatically deployed with Vercel (learn more).
To see the status of your deployment, click below or on the icon next to each commit.

🔍 Inspect: https://vercel.com/react-component/field-form/gkgamfjbt
✅ Preview: https://field-form-git-summary-touched.react-component.vercel.app

@zombieJ zombieJ requested a review from afc163 November 6, 2020 09:30
@codecov
Copy link

codecov bot commented Nov 6, 2020

Codecov Report

Merging #215 (b985a09) into master (fc01ed2) will increase coverage by 0.00%.
The diff coverage is 100.00%.

Impacted file tree graph

@@           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           
Impacted Files Coverage Δ
src/List.tsx 100.00% <ø> (ø)
src/Field.tsx 100.00% <100.00%> (ø)
src/useForm.ts 99.71% <100.00%> (+<0.01%) ⬆️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update fc01ed2...b985a09. Read the comment docs.

@zombieJ zombieJ marked this pull request as ready for review November 6, 2020 09:46
@zombieJ
Copy link
Member Author

zombieJ commented Nov 6, 2020

发个 minor,antd 那边当做 patch 发。

@afc163
Copy link
Member

afc163 commented Nov 6, 2020

记得留原始 issue,找了半天。

@afc163
Copy link
Member

afc163 commented Nov 6, 2020

@afc163
Copy link
Member

afc163 commented Nov 6, 2020

allTouched 这个是针对 isFieldsTouched 第一个参数的数组内是否所有 item 都 touched 了,不应该用在某个 item 下的内嵌字段。

我建议

  • user.age 变了,就是 user 变了。
  • user 是 Form.List 时,任意一个 item 变了。就是 user 变了,数组长度变化,也是 user 变了。

allTouched 不要影响上面任何情况。

@afc163
Copy link
Member

afc163 commented Nov 6, 2020

假设这个数据结构:

  • user
    • user.name => 变化了
    • user.age
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 没变

@zombieJ
Copy link
Member Author

zombieJ commented Nov 6, 2020

这个有考虑过,想着如果用户想知道一个 List 下面是否所有 field 都 touch 过,那他只能遍历了。

@afc163
Copy link
Member

afc163 commented Nov 6, 2020

遍历吧,至少 allTouched 语义还是保持原样吧,不然就多义了。

@zombieJ
Copy link
Member Author

zombieJ commented Nov 9, 2020

看看没问题我就合了~~

@zombieJ zombieJ merged commit 911edbb into master Nov 9, 2020
@delete-merged-branch delete-merged-branch bot deleted the summary-touched branch November 9, 2020 14:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants