将redux-form的脏道具存储在redux存储中

时间:2019-09-14 03:18:41

标签: reactjs redux redux-form react-redux-form

在我当前的应用程序中,我看到anyTouched属性已经存在于我的Web应用程序中的所有Redux表单的redux存储中。

我想将所有dirty道具存储在redux存储中,以便可以在Web应用程序的其他部分(如导航栏)中访问它。

我尝试过isDirty选择器。它显示空值。根据选择器的文档-选择器可以在应用程序的任何部分中用于查询任何表单的状态。可悲的是,它对我不起作用。

在当前代码中,我找不到anyTouched最初是如何存储在redux存储中的:-(。

我的问题是我该怎么做才能在redux store中存储脏道具?

1 个答案:

答案 0 :(得分:0)

如果您只想从redux-form中获取脏值,而不是isDirty,则还可以使用loadash这个JavaScript代码,在提交表单时我用它来获取唯一脏值

import _ from 'lodash';

render() {
    const { intl } = this.props;

    return (
      <div>
        <UserForm
          initialValues={this.initializeData()}
          intl={intl}
          onSubmit={immutableValues => {
            const data = immutableValues.toJS();
            this.getDirtyData(data);
          }}
        />
      </div>
    );
  }
}

initializeData() {
    ... Whatever your initialize data
}

getDirtyData(immutableData) {
      // Dirty data
      const updatedObj = this.changes(immutableData, this.state.myInitialState); 
      //Here you will get your dirty data in updatedObj.         
  }

changes(object, base) {
    return _.transform(object, (result, value, key) => {
      if (!_.isEqual(value, base[key])) {
        result[key] =
          _.isObject(value) && _.isObject(base[key])
            ? changes(value, base[key])
            : value;
      }
    });
  }

您将从https://gist.github.com/Yimiprod/7ee176597fef230d1451

获得参考