Я пытаюсь сделать секундомер в реакции и сокращении. У меня возникли проблемы с выяснением того, как создать такую вещь в редуксе.
Первое, что пришло в голову, - это действие START_TIMER
, которое установило бы начальное значение offset
. Сразу после этого я использую setInterval
для повторного запуска действия TICK
, которое вычисляет, сколько времени прошло с помощью смещения, добавляет его в текущее время и затем обновляет offset
.
Этот подход, похоже, работает, но я не уверен, как я очищу интервал, чтобы остановить его. Кроме того, кажется, что этот дизайн плохой, и, вероятно, лучший способ это сделать.
Вот полный JSFiddle, который работает с START_TIMER
. Если вы просто хотите посмотреть, как выглядит мой редуктор прямо сейчас, вот он:
const initialState = {
isOn: false,
time: 0
};
const timer = (state = initialState, action) => {
switch (action.type) {
case 'START_TIMER':
return {
...state,
isOn: true,
offset: action.offset
};
case 'STOP_TIMER':
return {
...state,
isOn: false
};
case 'TICK':
return {
...state,
time: state.time + (action.time - state.offset),
offset: action.time
};
default:
return state;
}
}
Я бы очень признателен за любую помощь.