Я получаю данные для всех ламп в одном запросе .(Однако я могу получить каждую ламповую информацию с сервера индивидуально ).
Данные, которые я получаю от сервера, выглядят следующим образом .:
[
{
"id": "1",
"state": 'ON'
},
{
"id": "2",
"state": 'OFF'
},
{
...
},
...
]
В моем приложении эти данные будут храниться в одном избыточном состоянии.Я использую FlatList для рендеринга этих данных вместе с простым переключателем , чтобы пользователь мог включить или выключить каждую лампу.
Когда пользователь изменяет состояние лампы, будет отправлено действие ЗАГРУЗКА , а на лампах целом будет отображаться счетчик.
При обновленииданные получены с сервера, будет отправлено действие SUCCESS , будет обновлено состояние избыточности, закручиватель исчезнет и, наконец, отобразятся обновленные данные.
Проблема 1 : когда пользователь взаимодействует только с одной лампой, я не хочу, чтобы все лампы перешли в состояние ЗАГРУЗКА!
Проблема2 : Я никогда не знаю, сколько ламп я получу в своих запросах.
Желаемое поведение : Только лампа, с которой взаимодействовал пользователь, должна показывать счетчик и запускает процесс обновления.
Мне нужна помощь с обработкой избыточных состояний.
Надеюсь, эта информация поможет.Ниже вы можете найти мои Rudcers для lightingInitReducer (получение данных для всех ламп) и lightingChangeStateReducer (изменение состояния лампы). isLoading используется для отображения счетчика.Кроме того, после успешного завершения процесса изменения состояния (отправлено LIGHTING_CHANGE_STATUS_SUCCESS ), новые данные будут повторно получены с сервера с помощью запроса init :
export const lightingInitReducer = (state = {
isLoading: false,
errMess: null,
info: {},
}, action) => {
switch (action.type) {
case ActionTypes.LIGHTING_INIT_SUCCESS:
return {
...state, isLoading: false, errMess: null, info: action.payload,
};
case ActionTypes.LIGHTING_INIT_FAILED:
return {
...state, isLoading: false, errMess: action.payload, info: {},
};
case ActionTypes.LIGHTING_INIT_LOADING:
return {
...state, isLoading: true, errMess: null, info: {},
};
default:
return state;
}
};
export const lightingChangeStateReducer = (state = {
isLoading: false,
errMess: null,
info: {},
}, action) => {
switch (action.type) {
case ActionTypes.LIGHTING_CHANGE_STATUS_SUCCESS:
return {
...state, isLoading: false, errMess: null, info: action.payload,
};
case ActionTypes.LIGHTING_CHANGE_STATUS_FAILED:
return {
...state, isLoading: false, errMess: action.payload, info: {},
};
case ActionTypes.LIGHTING_CHANGE_STATUS_LOADING:
return {
...state, isLoading: true, errMess: null, info: {},
};
default:
return state;
}
};