alibaba / formily

📱🚀 🧩 Cross Device & High Performance Normal Form/Dynamic(JSON Schema) Form/Form Builder -- Support React/React Native/Vue 2/Vue 3
https://formilyjs.org/
MIT License
11.12k stars 1.44k forks source link

[Feature Request] 如何获取当前表单模型中的字端值,而不是刚开始时 setValue 的值 #3978

Closed skyfore closed 9 months ago

skyfore commented 10 months ago

What problem does this feature solve?

场景是表单有回显状态,根据服务端返回的值回显再编辑,这个时候会 setValue 很多后端冗余的值进来,提交的时候想要过滤仅提交当前表单模型中的值,而不是加上初始化时 setValue 的值

What does the proposed API look like?

form.submit({ onlyPureValue: true })

junegod commented 10 months ago

form 有个方法,可以获取所有字段,拿到所有字段后过滤下就行了

skyfore commented 10 months ago

form 有个方法,可以获取所有字段,拿到所有字段后过滤下就行了

有相关的文档吗,我看下,而且我们的字端模型包含一些 key 比如 '[provinceId, cityId]' 之类的定义

whinc commented 10 months ago

toJS(form.submit()) //获取表单提交数据

skyfore commented 10 months ago

toJS(form.submit()) //获取表单提交数据

请问这个 toJS 这个 API 是哪儿的,有具体的文档吗

whinc commented 10 months ago

toJS(form.submit()) //获取表单提交数据

请问这个 toJS 这个 API 是哪儿的,有具体的文档吗

@formily/shared 好像是这个

janryWang commented 9 months ago

后端冗余了数据,然后后端又不消费,那为啥还需要前端过滤,正常情况下就是需要一来一回完全幂等的呢

skyfore commented 9 months ago

后端冗余了数据,然后后端又不消费,那为啥还需要前端过滤,正常情况下就是需要一来一回完全幂等的呢

正常情况下确实是这样的,但是我们的业务逻辑有些特殊 image

liudichen commented 9 months ago

form 有个方法,可以获取所有字段,拿到所有字段后过滤下就行了

form.getValuesIn(“*”) 应该就可以吧

janryWang commented 9 months ago

后端冗余了数据,然后后端又不消费,那为啥还需要前端过滤,正常情况下就是需要一来一回完全幂等的呢

正常情况下确实是这样的,但是我们的业务逻辑有些特殊 image

你这种场景,我理解就是 useMemo(()=>createForm(),[switchCondition]) 通过不同的条件直接实例化不同的 form 实例?

skyfore commented 9 months ago

form 有个方法,可以获取所有字段,拿到所有字段后过滤下就行了

form.getValuesIn(“*”) 应该就可以吧

感觉应该可行,这样直接取当前字段实例映射的值

skyfore commented 9 months ago

@janryWang 表单A 和 表单B 是存在重复字段的,需要用户之前填写的值能够正常展示,现在的逻辑切换表单后就会重新初始化 form 但是会把值作为 value 重新设置实现这个效果

const [formIns, setFormIns] = useState(createForm())

// 当监听到用户选择表单变化后触发,并且 currFormValue 是用户当前表单中的值,作为值给到新初始化的表单
const onChangeForm = (currFormValue) => {
  setFormIns(createForm({ values:  currFormValue }))
}
janryWang commented 9 months ago

@janryWang 表单A 和 表单B 是存在重复字段的,需要用户之前填写的值能够正常展示,现在的逻辑切换表单后就会重新初始化 form 但是会把值作为 value 重新设置实现这个效果

const [formIns, setFormIns] = useState(createForm())

// 当监听到用户选择表单变化后触发,并且 currFormValue 是用户当前表单中的值,作为值给到新初始化的表单
const onChangeForm = (currFormValue) => {
  setFormIns(createForm({ values:  currFormValue }))
}

这个我理解不影响,能支持的