Skip to content
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

fix(form): use subtree to validate nut-form #2582

Merged
merged 1 commit into from
Oct 12, 2023
Merged

Conversation

mikasayw
Copy link
Member

这个 PR 做了什么? (简要描述所做更改)

这个 PR 是什么类型? (至少选择一个)

  • 新特性提交
  • 日常 bug 修复
  • 站点、文档改进
  • 演示代码改进
  • 组件样式/交互改进
  • TypeScript 定义更新
  • 包体积优化
  • 性能优化
  • 功能增强
  • 国际化改进
  • 代码重构
  • 代码风格优化
  • 测试用例
  • 分支合并
  • 其他改动(是关于什么的改动?)

这个 PR 涉及以下平台:

  • NutUI 4.0 H5
  • NutUI 4.0 小程序
  • NutUI 3.0 H5
  • NutUI 3.0 小程序

这个 PR 是否已自测:

@codecov
Copy link

codecov bot commented Sep 25, 2023

Codecov Report

Patch coverage: 92.30% and project coverage change: -0.02% ⚠️

Comparison is base (db1d6b8) 84.99% compared to head (1d077c9) 84.97%.
Report is 3 commits behind head on v4.

Additional details and impacted files
@@            Coverage Diff             @@
##               v4    #2582      +/-   ##
==========================================
- Coverage   84.99%   84.97%   -0.02%     
==========================================
  Files         150      150              
  Lines       20555    20571      +16     
  Branches     2301     2304       +3     
==========================================
+ Hits        17470    17480      +10     
- Misses       3080     3086       +6     
  Partials        5        5              
Files Changed Coverage Δ
src/packages/__VUE/form/common.ts 81.53% <92.30%> (-0.08%) ⬇️

... and 2 files with indirect coverage changes

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@eiinu eiinu added this to the v4.1.7 milestone Sep 26, 2023
@eiinu
Copy link
Member

eiinu commented Oct 9, 2023

findFormItem 方法的实际效果是在 Form 组件中获取到所有子 FormItem 上的规则。
目前的方式是遍历所有子虚拟DOM,通过标签匹配上子组件后收集规则,实现上有些奇怪,用到了很多 vue 本身未对外提供的属性。
或许我们可以仅仅使用 provide 与 inject,就像 Menu 与 MenuItem 组件中使用的 useChildren 方法那样,Form 组件持久地拥有所有子 FormItem 的代理,当需要触发 validate 时,直接通过这些代理获取 props 或者调用其方法来获取规则。

@eiinu eiinu merged commit 2dffa00 into jdf2e:v4 Oct 12, 2023
4 of 5 checks passed
@mikasayw
Copy link
Member Author

通过vue未对外暴露的属性进行遍历收集是有些暴力
useChildren是一个更友好的方式,后期有时间再优化一下

findFormItem 方法的实际效果是在 Form 组件中获取到所有子 FormItem 上的规则。 目前的方式是遍历所有子虚拟DOM,通过标签匹配上子组件后收集规则,实现上有些奇怪,用到了很多 vue 本身未对外提供的属性。 或许我们可以仅仅使用 provide 与 inject,就像 Menu 与 MenuItem 组件中使用的 useChildren 方法那样,Form 组件持久地拥有所有子 FormItem 的代理,当需要触发 validate 时,直接通过这些代理获取 props 或者调用其方法来获取规则。

@eiinu
Copy link
Member

eiinu commented Oct 12, 2023

通过vue未对外暴露的属性进行遍历收集是有些暴力 useChildren是一个更友好的方式,后期有时间再优化一下

findFormItem 方法的实际效果是在 Form 组件中获取到所有子 FormItem 上的规则。 目前的方式是遍历所有子虚拟DOM,通过标签匹配上子组件后收集规则,实现上有些奇怪,用到了很多 vue 本身未对外提供的属性。 或许我们可以仅仅使用 provide 与 inject,就像 Menu 与 MenuItem 组件中使用的 useChildren 方法那样,Form 组件持久地拥有所有子 FormItem 的代理,当需要触发 validate 时,直接通过这些代理获取 props 或者调用其方法来获取规则。

测试发现使用 subTree 在 Taro 框架下的效果不太好,我换成 useChildren 的方式修改了 #2593

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
2 participants