Как управлять вложенным объектом с React Native State - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь создать приложение для напоминания о воде.У меня есть 4 экрана, и я использую реагирующую навигацию

  • Домашняя страница (что позволяет пользователям увеличивать количество выпитого в тот день и отображать, сколько воды они выпили)
  • История (гдеистория потребления воды пользователем отображается в виде графика, и здесь мне нужен вложенный объект)
  • Уведомления (где пользователи определяют с помощью кнопок переключения, хотят ли они получать уведомления и когда получать)
  • Настройки (где пользователь вводит возраст, вес, чтобы определить, сколько он должен пить ежедневно).Это первый экран, который пользователи видят при загрузке приложения.

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

Что я сделал, так это то, что создал новое состояние с именем object и установил для него пустой объект.И я смог обновить состояние истории, как показано ниже, с помощью функции обработчика состояний.

  handleHistory = () => {
    let currentDateString = moment().format('DDMMYYYY');
    this.setState(
      {
        history: {
          ...this.state.history,
          date: currentDateString,
          drunk: this.state.drunk,
          goal: this.state.goal,
          progress: this.state.progress,
        },
      });
  };

//this is what I get
Object {
    "date": "20052019",
    "drunk": 136,
    "goal": 82,
    "progress": 1.6585365853658536,
}

Мне нужен вложенный объект с датами с ключами в качестве даты

history: {
    "20052019": {
        "date": "20052019",
        "drunk": 136,
        "goal": 82,
        "progress": 1.6585365853658536,
    },
    "21052019": {
        "date": "21052019",
        "drunk": 82,
        "goal": 82,
        "progress": 1.0,
    }
}

1 Ответ

1 голос
/ 21 мая 2019

Вы можете динамически получать доступ / создавать ключи, используя object[key].

handleHistory = () => {
  const currentDateString = moment().format('DDMMYYYY');
  const { history, drunk, goal, progress } = this.state;
  this.setState({
    history: {
      ...history,
      [currentDateString]: {
        ...history[currentDateString],
        date: currentDateString,
        drunk, goal, progress
      }
    }
  });
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...