Используйте эти логические свойства dirty
и pristine
, которые придает редукс-форме ваш оформленный компонент-редукс-форму.
Нетронутый имеет значение true, когда значения форм не изменены и dirty - истина, когда значения формы были изменены.
Затем вы можете использовать их и условия ReactJs для отображения других компонентов по своему усмотрению.
Пример;
import React from 'react';
import { Field, reduxForm } from 'redux-form';
const SimpleForm = props => {
const { handleSubmit, pristine, dirty, reset, submitting } = props;
return (
<form onSubmit={handleSubmit}>
<div>
<label>First Name</label>
<div>
<Field
name="firstName"
component="input"
type="text"
placeholder="First Name"
/>
</div>
</div>
<div>
<label>Last Name</label>
<div>
<Field
name="lastName"
component="input"
type="text"
placeholder="Last Name"
/>
</div>
</div>
<div>
<button type="submit" disabled={pristine || submitting}>Submit</button>
{dirty &&
<button type="button" disabled={pristine || submitting} onClick={reset}>
Save Changes
</button>
}
{pristine &&
<button type="button" disabled={submitting} onClick={reset}>
View List
</button>
}
</div>
</form>
);
};
export default reduxForm({
form: 'simple', // a unique identifier for this form
})(SimpleForm);
Вы можете видеть, что я использую {dirty && component_to_render}
только для рендеринга этого компонента, когда форма получила какие-либо изменения, и использую
<button type="button" disabled={pristine || submitting}> Submit </button>
для отключения кнопки.когда ничего не было изменено или когда форма отправляется.
Выше приведен пример кода (с незначительными изменениями) из пример базовой редукции и мой полный отредактированный код доступен здесь