【问题标题】:Redux-form loading indicator while auto saving自动保存时的 Redux-form 加载指示器
【发布时间】:2019-08-27 03:10:24
【问题描述】:

我正在开发一个类似谷歌文档最小版本的反应应用程序。我正在使用带有两个字段 titlecontent 的 redux 表单,并且还对输入的更改进行自动提交数据。

如何实现在输入时显示Saving 并在完成提交时显示Saved 的功能?

// file: AutoSaveForm.js
import React, { Component } from 'react'
import { Field, reduxForm } from 'redux-form'
import _debounce from 'lodash.debounce'   

class AutoSaveForm extends Component {  
  render() {
    const { handleSubmit, submitting } = this.props

    return (
        <form onSubmit={handleSubmit}>
          <Field name="title" component="input" />
          <Field name="content" component="textarea" />
          <button type="submit" disabled={submitting}>
            Submit
          </button>
        </form>
    )
  }
}

export default reduxForm({
  form: 'auto_save_form',
  onChange: _debounce((values, dispatch, props, previousValues) => {
    props.submit()
  }, 800)
})(AutoSaveForm)

【问题讨论】:

    标签: reactjs react-redux redux-form


    【解决方案1】:

    您可以使用 redux-saga 或创建自定义 redux 中间件来监听 redux-form 操作(更改、模糊、数组更改 ..等)

    redux-form 导出它所有的动作类型,你可以这样导入:

        import { actionTypes } from 'redux-form';
    

    在您的 saga 处理程序/中间件中,您可以通过发送 submit action 以编程方式提交表单

    对于保存和保存状态,您可以使用isSubmitting, isDirty redux-form selector

    【讨论】:

    • 我拥有所有这些状态,例如dirtysubmittingthis.propsdirty 字段仅在初始值更改时更改一次。如果用户当前正在输入,我可以有类似typing 的状态,所以当用户停止输入时我可以显示saving 状态,检查submitting 道具并显示“保存”状态
    • 我可以使用Field 上的onChange 事件来了解用户是否正在输入。但是我怎么知道用户是否停止了呢?
    • 你不需要typing 状态,submitting 状态表示已经保存,一旦保存,submitting 将为假,然后您可以检查dirty 以显示它是否已保存与否。
    • 谢谢:)。它按我预期的方式工作。 dirty 状态未在表单提交时更新。所以我添加了这个onSubmitSuccess: (values, __, props) =&gt; props.initialize(values)
    • 我会这样做:submitting ? 'saving' : (dirty ? 'saving' : 'saved')
    猜你喜欢
    • 1970-01-01
    • 2020-06-14
    • 2013-09-04
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 2010-11-21
    • 2021-09-20
    • 1970-01-01
    相关资源
    最近更新 更多