Проблема: обновление Redux не отображается в пользовательском интерфейсе в iOS
Код
return (
<React.Fragment>
{this.props.children}
{this.props.showNightOutFeedback &&
this.props.remainderNightoutFeedbackId &&
this.props.remainderNightoutFeedbackId.length > 0 &&
this.props.queueingPopups &&
this.props.queueingPopups.length > 0 &&
this.props.queueingPopups[0].popupName ===
queueActionTypes.ROUTE_FEEDBACK_POPUP && (
<FeedbackRatingScreen
routeName={
(this.props.nightOutDetails &&
this.props.nightOutDetails.route_name) ||
"Feedback for Route"
}
routeID={this.props.remainderNightoutFeedbackId[0]}
visible={this.props.showNightOutFeedback}
rating={
(this.props.nightOutDetails &&
this.props.nightOutDetails.total_rating) ||
0
}
onClose={() => {
this.props.showNightOutFeedbackModal(false);
this.props.deQueue();
}}
/>
)}
{this.props.showVenueFeedback &&
!isObjectEmpty(feedbackObj) &&
this.props.queueingPopups &&
this.props.queueingPopups.length > 0 &&
this.props.queueingPopups[0].popupName ===
queueActionTypes.VENUE_FEEDBACK_POPUP && (
<FeedbackAndRatingComponent
navigation={this.props.navigation}
data={feedbackObj ? feedbackObj : {}}
onClose={data => {
this.props.showVenueFeedbackFun(false);
this.props.updateFeedbackIsCompleted(data, true);
if (
this.props.remainderNightoutFeedbackId &&
this.props.remainderNightoutFeedbackId.length
) {
this.props.showNightOutFeedbackModal(true);
}
this.props.deQueue();
}}
/>
)}
{this.props.user &&
// this.props.showInviteScreenModal &&
this.props.queueingPopups &&
this.props.queueingPopups.length > 0 &&
this.props.queueingPopups[0].popupName ===
queueActionTypes.INVITE_SCREEN_POPUP && (
<InviteScreen
isInvite={this.props.queueingPopups[0].popupData.isInvite}
inviteId={this.props.queueingPopups[0].popupData.inviteId}
nightOutID={this.props.queueingPopups[0].popupData.nightoutId}
navigation={this.props.navigation}
navigateBack={this.props.navigateBack}
/>
)}
{this.props.user &&
// this.props.showInviteScreenModal &&
this.props.queueingPopups &&
this.props.queueingPopups.length > 0 &&
this.props.queueingPopups[0].popupName ===
queueActionTypes.INVITATION_ALERT_POPUP && (
<InviteScreen
isInvite={this.props.queueingPopups[0].popupData.isInvite}
inviteId={this.props.queueingPopups[0].popupData.inviteId}
nightOutID={this.props.queueingPopups[0].popupData.nightoutId}
navigation={this.props.navigation}
navigateBack={this.props.navigateBack}
/>
)}
{this.props.user &&
// this.props.showInviteScreenModal &&
!this.props.enterRoute &&
this.props.queueingPopups &&
this.props.queueingPopups.length > 0 &&
this.props.queueingPopups[0].popupName ===
queueActionTypes.INVITATION_START_POPUP && (
<InviteScreen
isInvite={this.props.queueingPopups[0].popupData.isInvite}
inviteId={this.props.queueingPopups[0].popupData.inviteId}
nightOutID={this.props.queueingPopups[0].popupData.nightoutId}
navigation={this.props.navigation}
navigateBack={this.props.navigateBack}
/>
)}
{!this.props.venues.enterVenues &&
//showModal.active &&
//this.props.venues.venueDetails.venue_enter[0] != undefined &&
(this.props.queueingPopups &&
this.props.queueingPopups.length > 0 &&
this.props.queueingPopups[0].popupName ===
queueActionTypes.ENTER_VENUE_POPUP &&
(shouldShowPopUpOrNot && (
<EnterRoutePopup
navigation={this.props.navigation}
visible={true}
isFreeRun={
this.props.venues.venueDetails.venue_enter.length &&
this.props.venues.venueDetails.venue_enter[0].isFreeRun
}
data={this.props.queueingPopups[0].popupData}
message={""}
onCloseModal={() => {
showModal.active = false;
this.props.closeModal();
}}
onClose={() => {
showModal.active = false;
this.props.closeModal();
this.props.deQueue();
// this.props.isPopupActiveFun(false);
}}
/>
)))}
{this.props.isVenueLoading &&
this.props.queueingPopups &&
this.props.queueingPopups.length > 0 &&
this.props.queueingPopups[0].popupName ===
queueActionTypes.LOADING_VENUE &&
VenueData.isVenueInARClicked && <LoaderPopup onClose={() => {}} />}
{this.props.showNavigateModalPopup &&
this.props.queueingPopups &&
this.props.queueingPopups.length > 0 &&
this.props.queueingPopups[0].popupName ===
queueActionTypes.NAVIGATE_VENUE_POPUP && (
<EnterRoutePopup
navigation={this.props.navigation}
visible={this.props.showNavigateModalPopup}
isFreeRun={true}
data={
this.props.venueNavigateData ? this.props.venueNavigateData : {}
}
onClose={() => {
this.props.showNavigateModalPopupFun(false);
// this.props.isPopupActiveFun(false);
this.props.deQueue();
}}
/>
)}
</React.Fragment>
);
}
mapStateToProps, mapDispatchToProps
используется для подключения моего queueReducer.
const popupQueuingReducer = (state = initialState, action) => {
switch (action.type) {
case queueActionTypes.ENQUEUE: {
let data = [];
data = state.queueingPopups;
let currentQueueData = null;
return {
...state,
queueingPopups: data
};
}
case queueActionTypes.PUSH: {
let data = state.queueingPopups;
// data.indexOf(action.data) == -1 &&
let currentQueueData = null;
currentQueueData = {
popupName: action.data.popupName,
popupData: action.data.queueData
};
data.unshift(currentQueueData);
return {
...state,
queueingPopups: data
};
}
case queueActionTypes.REMOVE_ENTER_VENUE: {
let data = state.queueingPopups;
data = data.filter(function(item) {
return item !== queueActionTypes.ENTER_VENUE_POPUP;
});
return {
...state,
queueingPopups: data
};
}
case queueActionTypes.REMOVE_LOGOUT: {
let data = state.queueingPopups;
data = data.filter(function(item) {
return item !== queueActionTypes.LOGOUT;
});
return {
...state,
queueingPopups: data
};
}
case queueActionTypes.REMOVE_VENUE_LOADING: {
let data = state.queueingPopups;
data = data.filter(function(item) {
return item.popupName !== queueActionTypes.LOADING_VENUE;
});
return {
...state,
queueingPopups: data
};
}
case queueActionTypes.REMOVE_PAUSE_POP_UP: {
let data = state.queueingPopups;
data = data.filter(function(item) {
return item.popupName != queueActionTypes.PAUSING_POP_UPS;
});
return {
...state,
queueingPopups: data
};
}
case queueActionTypes.DEQUEUE: {
let currentData = [];
currentData = state.queueingPopups;
if (currentData.length > 0) {
currentData.shift();
}
// state.queueingPopups.length && state.queueingPopups.shift();
return {
...state,
queueingPopups: currentData
};
}
case queueActionTypes.EMPTY_QUEUE: {
let data = state.queueingPopups;
data = data.filter(function(item) {
return (
item === queueActionTypes.PAUSING_POP_UPS ||
item === queueActionTypes.USER_MENU_POPUP
);
});
return {
...state,
queueingPopups: data
};
}
case queueActionTypes.RESTORE_STATE:
console.log("action.data" + action.data);
return {
...state,
queueingPopups: action.data
};
default:
return {
...state
};
}
};
export default popupQueuingReducer;
Рабочий сценарий Объяснение:
При добавлении определенных предупреждений в очередь (массив) в моем queueReducer и после завершения работы с одним массивом я удаляю элемент из очереди. Предполагается, что это изменение вытолкнет последующий тип массива в мою очередь, поскольку любое изменение в reducerState будет отражено в моем файле js, так как они связаны через mapStateToProps. Это прекрасно работает в android, но в iOS это не ожидаемое поведение.
Это связано с платформой или кодом ??
Я полностью сбит с толку тем, что он не работает, поскольку это простые обновления состояния, а не что-то, связанное с платформой или около того
Может кто-нибудь указать мне, что здесь не так?
Любая помощь будет признателен.
Заранее спасибо
РЕДАКТИРОВАТЬ 1
Реквизит обновляется в магазине. Поскольку я могу полностью подтвердить, что каждое отдельное предупреждение, которое я хочу, находится в моей очереди, и когда каждый раз, когда мое значение очереди изменяется, реквизиты componentWillReceive обновляются с новым значением. Но я не могу увидеть отражение в пользовательском интерфейсе
EDIT 2
Поскольку @HMR, указанное как enqueue, не изменяет очередь массива, я попытался изменить два оповещения enqueue наберите pu sh, но результаты те же
РЕДАКТИРОВАТЬ 3
let dataToQueue = {
popupName: queueActionTypes.NAVIGATE_VENUE_POPUP,
queueData: data
};
dispatch(pushQueue(dataToQueue));
Приведенный выше метод используется для отправки моего события