Поскольку вы не используете избыточную форму, я объясню в логике c, как вам нужно ее достичь
Таким образом, ваше состояние будет иметь ключ и значение, подобные приведенному ниже формату, это предварительно заполненные значения
state = {formValues:{firstName: 'John', secondName: 'Doe', Address: ''}, isFormDirty: false}
Таким образом, исходя из начального состояния isFormDirty , вы можете отключить кнопку, поскольку изменений нет
Теперь вам нужно присоединить метод к Форма на верхнем уровне, поскольку происходит делегирование события, вы получите событие из дочернего ввода, поэтому предположим, что firstName поле user изменилось, теперь вы можете иметь объект как внутри состояния, когда компонент загружается
changedValues: {firstName: false, secondName: false, Address: false}
Теперь у вас есть два объекта changeValues и formValues
onFormHandleChange = (e) => {
// compare the current value and pre populated value
e.target.value === formValues[e.target.name]
// if its true
changedValues[e.target.name] = true
else false
}
, поэтому на основе этого объекта ChangeValues, например, Object.values(this.state.changedValues)
массив содержит true, вы можете сделать isFormDirty для true
с момента обновления состояния ваша кнопка активируется
Надеюсь, это поможет лучше понять проблему