zhangleshiye

请教下关于 react 表单处理相关的优化

  •  
  •   zhangleshiye · Jul 29, 2022 · 2704 views
    This topic created in 1559 days ago, the information mentioned may be changed or developed.

    现在主要是用 ant proform 来处理表单,

    table 传进来的 props -> 我重新用[merge,setMerge] =usestate(props)包裹了下 mergeState, 然后在具体的某个定义的 editForm 里进行修改。然后涉及一些表单联动的(改了一个表单的值,影响另一个表单属性),我又写了个 [formState,setFormState]=usestate,主要感觉自己写的怪怪的。

    我现在理想的是想写一些 form 的 hooks, {requestForm}=useFormRequest() {props} =useFormColumn() 传到<MyForm props={requestForm} >,苦于不知道如何封装。请教下大佬们哪里有这方面的资料,或者关键词。

    9 replies  •  2022-08-05 17:53:31 +08:00
    idealist
    idealist
    Jul 29, 2022
    1
    我记得 antd 的 Form 不是内部处理状态吗?不需要自己维护状态
    happyeveryday
    happyeveryday
    Jul 29, 2022
    2
    用 ant 那套 form 就不应该自己处理 state 了啊,就算需要关联的改变操作,还是用 form.setFiledValues 去设置呀
    hua123s
    hua123s
    Jul 29, 2022❤️1
    3
    联动应该用 shouldUpdate => formRef.getFieldFormatValue(namePath) 来获取值,你用法就错了。
    zhangleshiye
    zhangleshiye
    OP
    Jul 29, 2022
    4
    @hua123s 我试试谢谢
    carrymaniac
    carrymaniac
    Jul 29, 2022
    5
    应该在 Form 的 onChange 去做相对应的处理,使用了 form 表单就不应该用受控组件的写法了
    zhangleshiye
    zhangleshiye
    OP
    Jul 29, 2022
    6
    @carrymaniac 嗯 我看官方是推荐用 onValueChange 里集中修改 不过感觉使用起来还是很痛啊
    jsun969
    jsun969
    Jul 29, 2022
    7
    可以试一下 react hook form 哦
    类型安全 很优雅地管理复杂表单
    GitHub: https://github.com/react-hook-form/react-hook-form
    官网: https://react-hook-form.com/
    gouan
    gouan
    Aug 5, 2022
    8
    @hua123s 其实使用自定义表单控件性能更好点,如果表单比较复杂嵌套,shouldupdate 性能不好,接受 value,onchange,value:{name:'xxxx',useMode:''},你上面的 label 直接{value.name}合同 xxx 。
    hua123s
    hua123s
    Aug 5, 2022
    9
    @gouan 新版本有和 react-hook-form 差不多的 api 了,可以不用这些乱七八杂的方法了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2747 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 14:37 · PVG 22:37 · LAX 06:37 · JFK 09:37
    ♥ Do have faith in what you're doing.