Как получить сумму значений состояния дочернего компонента в родительском компоненте при первой загрузке?

Я пытался иметь родительский компонент с атрибутом состояния "сумма". Есть 2 дочерних компонента с атрибутом состояния «значение» со значениями 1 и 2 соответственно.

При загрузке приложения я хочу, чтобы Parent показывал «3». В настоящее время я вызываю родительский метод из дочернего с помощью componentDidMount(), но в родительском после this.setState() значения не обновляются!

Child:
componentDidMount() {
    this.props.calculateTotal(this.state.value);
  }

Parent:
class Parent extends Component {
  constructor(props) {
    super(props);
    this.state = {
      total: 0
    };
  }

calculateTotal = value => {
    console.info("value ", value);
    const calculatedTotal = this.state.total + value;
    console.info("calculatedTotal ", calculatedTotal);
   this.setState({
      total: calculatedTotal
    });
    console.info(
      "total after setting state",
      this.state.total
    );
  };
}

В Parent я ожидал, что totalValue получит сумму, но этого не происходит.

Любая помощь в этом отношении будет полезной.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
266
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете попробовать то же самое в обратном вызове setState, и новое значение отразится. Поскольку setState не происходит синхронно, ваш непосредственный console.info после setState игнорируется.

Проверьте следующее, это должно делать то, что вы пытаетесь сделать, я использую параметр prevState для доступа к текущему состоянию вместо this.state.total + value:

calculateTotal = value => {
   this.setState(prevState => ({
      total: prevState.total + value;
    }, () => {
      console.info("total after setting state", this.state.total);
      console.info("This callback will show the new value");
    }));
    console.info("This will NOT show the new value", this.state.total);
  };
}

Надеюсь, это полезно!

Другие вопросы по теме