Estoy codificando una aplicación de alarma y quiero contar cuántas veces se ha disparado la alarma en una hora y en un día. Uso el kit de herramientas redux para manejar el estado de la alarma (verdadero/falso) y el reductor countAlarm para incrementar el conteo. En este momento handleCount envía countAlarm cada vez que alarmValue es verdadero. Me gustaría contar cuántas veces alarmValue es verdadero en una hora y en un día. ¿Cómo puedo hacer eso?
const dispatch = useDispatch(); const countValue = useSelector((state) => state.count.value); const alarmValue = useSelector((state) => state.alarm.active); const handleCount = () => { if (alarmValue) { dispatch(countAlarm()); }} useEffect(() => { handleCount() }, [alarmValue]) return ( <View> <Text>{countValue}</Text> </View> ... countAlarm :
import { createSlice } from '@reduxjs/toolkit'; const initialStateValue = { value: 0 } const countSlice = createSlice({ name: 'count', initialState: initialStateValue, reducers: { countAlarm: (state = initialStateValue) => { state.value++; }, } }); export const {countAlarm} = countSlice.actions; export default countSlice.reducer; alarmValue :
import { createSlice } from '@reduxjs/toolkit'; const initialStateValue = { active: false, } const alarmSlice = createSlice({ name: 'alarm', initialState: initialStateValue, reducers: { alarmOn: (state = initialStateValue) => { state.active = true; }, alarmOff: (state = initialStateValue) => { state.active = false; }, } }); export const {alarmOn, alarmOff} = alarmSlice.actions; export default alarmSlice.reducer;¿Qué quieres decir con en una hora / en un día? Agrego los datos:
const initialStateValue = { value: 0, numberOfAlarmsInDay: 0 numberOfAlarmsPerHour: { perFirstHour: 0, perSecondHour: 0, ... } }Entonces, necesitas
¡Espero que esto te ayude un poco a avanzar más!
Realmente no deberías ir a esta "rotonda a través del componente". En su lugar, deja que countSlice simplemente reaccione a la acción alamSlice de alarmOn :
import { createSlice } from '@reduxjs/toolkit'; import { alarmOn } from './alarmSlice' const initialStateValue = { value: 0 } const countSlice = createSlice({ name: 'count', initialState: initialStateValue, reducers: { // reducers for "this slice" }, extraReducers: builder => { // reducers for actions owned by other slices builder.addCase(alarmOn, (state) => { state.value++; }) } });Consulte Permitir que muchos reductores respondan a la misma acción en la guía Redux Style.
(Por supuesto, también puede mantener el counter en su alarmSlice ; dependiendo de la complejidad, también podría ser una buena solución)
PD: no lo hagas (state = initialStateValue) => { - no necesitas inicializar tu estado así, createSlice se encarga de eso.