formily/antd

617 阅读1分钟

原理

先让数据变成响应式,再去操作

formily/antd

FormItem

  • 相当于Field的封装
  • 注意:想让FormItem变成响应式得包一层observer name.title...这些属性是传给Field组件的,怎么传给FormItem? 只要涉及到组件通信,层级不确定就可以用context 注意:因为要跟formily/react的Field通信只能拿其提供的context
    const field = useContext(FieldContext)
    console.log('field',field);//name.title...这些属性

Input

import React from 'react'

export const Input = (props) => {
    const {value = '',style,...res} = props
  return <input {...res}  value={value} style={{...style,'border':'1px solid blue'}}/>
}

Submit

如果onClikc返回的是false就阻塞提交

import React from 'react'

export const Submit = (props) => {
    const {children,onSubmit,onSubmitSuccess,onSubmitFailed,onClick} = props
  return <button onClick={(e) => {
    if(onClick){
        if(onClick(e) === false){
            return;
        }
    }
  }}>{children}</button>
}

onSubmit提交需要表单,怎么获取? submit作为其子组件可以拿到其传值,使用formily/react提供的自定义hook,useParentForm(用于读取最近的 Form 或者 ObjectField 实例,主要方便于调用子表单的 submit/validate)

    const form = useParentForm()
    if(onSubmit){
       // 成功执行onSubmitSuccess,否则onSubmitFailed
       form.submit(onSubmit).then(onSubmitSuccess).catch(onSubmitFailed)
   }