-
Notifications
You must be signed in to change notification settings - Fork 4.8k
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
react-native 组件 某state更新再次 触发Form render 方法后, 二次 点击 submit 收集的值变位空 #11473
Comments
等待热心的小伙伴解决问题中..., 有一些相关的 issues 可能帮助到你!
Thank you so much! |
可否提供相应复现代码片段 |
表单项value变更,不应该更新一下对应属性? |
@zhiqingchen export default function TestFormSubmitTwice(){
const [input, setInput] = useState();
return <Form onSubmit={value => {
setInput(value.detail.value?.code || "无")
Taro.showToast({ title : JSON.stringify(value.detail.value || "无数据")})
}}>
<Label>{input}</Label>
<Input name="code" placeholder={"请输入"} />
<Button
type="primary"
formType="submit"
>
{"提交, 第二次提交时, code值被重置"}
</Button>
</Form>
} |
建议加上value属性 import { useState } from 'react'
import {Form, Label, Button, Input} from '@tarojs/components'
import Taro from '@tarojs/taro'
export default function TestFormSubmitTwice() {
const [input, setInput] = useState();
const [v, setV] = useState('')
return (
<Form
onSubmit={value => {
setInput(value.detail.value?.code || "无");
Taro.showToast({
title: JSON.stringify(value.detail.value || "无数据")
});
}}
>
<Label>{input}</Label>
<Input name="code" value={v} onInput={({detail}) => {
setV(detail.value)
}} placeholder="请输入"
/>
<Button type="primary" formType="submit">
提交, 第二次提交时, code值被重置
</Button>
</Form>
);
} |
@zhiqingchen 可以加这个属性。 |
@zhiqingchen 但是最终要考虑app端、小程序端、H5 端 Form 组件行为一致性。 |
如果其他端也是同样的逻辑。可以不加。然后你可以关闭此提问。 |
你提的是对的,只是这么改有个小问题,可能有设置value为undefined的场景。 |
建议你先打patch解决自身业务问题,此处改动还需要再思考下🤔。 |
好的。 |
还是判断 undefined 吧 |
行 |
@supermaverickws 有遇到生产环境下,收集不到form的数据吗 |
release 还是 debug |
如果是其他问题,另外提供issue吧 |
哈哈,我这边只是提醒下,这个issue的表单使用者也可能遇到这个问题。 |
这个特性解决了什么问题?
react-native 组件 某state更新后 Form 二次 触发 submit 收集的值变位空
原因是。外面组件state 更新后,好像触发了 Form 组件的 bindValueChangeEvent 方法。
如果外面没有把第一次收集的值 设置到 value 属性里。 就会重置 Form 组件的 formValues 里对应的值。
如果加个是否 value !== undifend 判断的话,就正常,
The text was updated successfully, but these errors were encountered: