Модель данных для финансовой таблицы с React и MongoDB

#reactjs #database-design #react-hooks

Вопрос:

Пользовательский интерфейс:

Ежемесячная таблица. Разные показатели в виде строк. Последняя строка рассчитывается из приведенных выше строк

 | Metric | Jan     | Feb     | Mar    | Apr     | Mai     | Jun     | Jul     | Aug     | Sep     | Oct     | Nov     | Dec     |
 -------- --------- --------- -------- --------- --------- --------- --------- --------- --------- --------- --------- --------- 
| Visits | 1000.00 | 1050.00 | 1102.5 | 1157.63 | 1215.52 | 1276.30 | 1340.12 | 1407.13 | 1477.49 | 1551.36 | 1628.93 | 1710.38 |
| Click  | 0.1     | 0.1     | 0.1    | 0.1     | 0.1     | 0.1     | 0.1     | 0.1     | 0.1     | 0.1     | 0.1     | 0.1     |
| Stream | 100.00  | 105.00  | 110.25 | 115.76  | 121.55  | 127.63  | 134.01  | 140.71  | 147.75  | 155.14  | 162.90  | 171.04  |
 
  • Посещения (базовое значение — 1000 — к которому применяется коэффициент роста — 0.05 )
  • Частота кликов (постоянная)
  • Поток (расчет: Visits * Click )

Требования:

  • Когда базовое значение обновляется, строка обновляется
  • Когда строка обновляется, последняя строка пересчитывается заново
  • При изменении границ дат размер строки изменяется

Вот мой текущий модальный режим данных

 {
  name: 'Data Stream',
  startDate: '2021-01-01',
  endDate: '2021-12-01',
  metrics: [
    {
      type: 'VISIT',
      name: 'Visits',
      value: 1000,
      rate: 0.05,
      data: [1000.00,1050.00,1102.5,1157.63,1215.52,1276.30,1340.12,1407.13,1477.49,1551.36,1628.93,1710.38]
    },
    {
      type: 'CLICK',
      name: 'Click',
      value: 0.1,
      data: [0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1]
    }
  ],
  stream: [100.00,105.00,110.25,115.76,121.55,127.63,134.01,140.71,147.75,155.14,162.90,171.04]
}
 

Проблема:

Я наблюдаю startDate endDate , metrics и stream

На горе

  • эффект использования устанавливает значения по умолчанию

Когда значение изменится

  • Я обновляю value и data для данной метрики
  • Эффект использования с [metrics] зависимостью вычисляет массив потоков

Когда меняются даты

  • Эффект использования с [startDate, endDate] зависимостью пересчитывает data поле для каждой метрики

Проблема в том, что при монтировании, metrics , startDate и endDate изменении , эффект использования срабатывает одновременно и data и stream get undefined , null или [NaN, NaN, ...]

  1. Is it possible to trigger useEffect in a waterfall mode such as a calculation (e.g. stream) happens once other fields (e.g. data) has been calculated?
  2. Can you suggest a data model and/or a logic that could make the requirements work for such a case?