在onChange

时间:2018-05-01 06:45:24

标签: redux-form

我有一个这样的字段:

{
    render() {

        return <Field type="text" onChange={this.debouncedSubmit} />

        ....
    }
    debouncedSubmit = debounce(this.props.submit, 500)
}

export default reduxForm({
    form: 'week-form',
    onSubmit: async function() {
        await new Promise(resolve => setTimeout(resolve, 5000))
    }
})

除了一个问题,这个工作正常。我们在这里看到提交需要5秒钟。我们也看到deboucne是500ms。所以让我们说用户输入两个字符,然后等待1秒。触发的辩论和提交正在进行中。现在,在提交过程中,让我们说用户输入另一个字符。这会触发去抖动,并在1.5秒时触发提交。但是因为提交目前正在进行中,所以错过了。

是否有一种带有redux-form的模式,不要错过这个?

我尝试了什么:

我想&#34;重新初始化&#34;表单,但是&#34;如果当前字段值与将要用&#34;初始化的值不同,则不更新字段值,然后在componentDidUpdate中如果表单是脏的,那么我将再次触发提交。但是我遇到了一个问题:

我在reduxForm中设置:

enableReinitialize: true,
keepDirtyOnReinitialize: true,

我用数据初始化表单。但是在第一次提交之后,由于某种原因它覆盖了该字段并且我丢失了第三个字符&#34;我在提交过程中投入了。当我将keepDirtyOnReinitialize设置为true时,为什么会发生这种情况。

1 个答案:

答案 0 :(得分:0)

所以实际上我的逻辑是有效的。我在网上创建了一个演示,它运行得很完美:

https://codesandbox.io/s/37z9217q6

问题是我在Android上的react-native中这样做,并且有一个错误导致了我的问题,我提交了错误 - https://github.com/facebook/react-native/issues/19085