iOS -redux обновление не работает Хорошо работает в android - PullRequest
0 голосов
/ 10 апреля 2020

Проблема: обновление 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));

Приведенный выше метод используется для отправки моего события

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...