Состояния установки нескольких компонентов приводят только к одному изменению - PullRequest
0 голосов
/ 28 сентября 2019

В состоянии в App.js у меня есть куча информации в состоянии о каждом поле:

fields: {
    what_is_your_name: {
      value: null,
      dirty: false,
      valid: null,
      errorText: null,
      step: 1,
      validationRules: {
        required: true
      }
    } //... etc

Когда компонент загружается, я хочу обновить, является ли он действительным - поэтому я имеюиспользовал ловушку:

useEffect(() => {
props.validateField(props.value, fieldName, props.validationRules);
  }, []);

Это вызывает validateField, который должен проверить, является ли поле действительным, и, если это не так, обновить текст ошибки:

const allFields = this.state.fields;
const allValues = this.state.fields[fieldName];
var errorText = null;

if (!value) {
  errorText = "This field is required";
} else {
  errorText = null;
}

this.setState(
  {
    fields: {
      ...allFields,
      [fieldName]: {
        ...allValues,
        errorText: errorText
      }
    }
  },
  () => {
    console.log("the state was set");
  }
);
  }

У меня есть 4 компонентаэкран, который должен все обновить.Состояние, относящееся к последнему компоненту, всегда обновляется, но первые 3 остаются неизменными - даже если я переключаю компоненты.

Я подозреваю, что это проблема синхронизации?

(Я попробовал другой подходпопадания метода validateField в цикл при нажатии кнопки, но это также привело к обновлению только 1)

...