Состояние Redux выходит неопределенным - PullRequest
0 голосов
/ 08 октября 2018

Мне трудно понять, почему мое состояние редукса становится неопределенным на более позднем этапе.

поэтому у меня есть действие, которое выглядит следующим образом

export const coinUpdateState = (booleanValue) => {
    console.log(typeof booleanValue) //This logs Boolean 
    return function (dispatch) {
        dispatch({
            type: COIN_UPDATE_STATE,
            payload: booleanValue
        })
    }
}

, и редуктор, который выглядит следующим образом

 const initialState = {
    DataFetching: true,
    DataSucess: [],
    DateError: [],
    DateError: false, 
    DataSort: true,
    DataUpdate: true
  }



export default function(state = initialState, action) {

    switch (action.type) {
      case EXCHANGE_CURRENCY_FETCHING:
      return {
        DataFetching: true,
        DataSort: true
      }
      case EXCHANGE_CURRENCY_FETCH_SUCCESS:
      return {
        ...state,
        DataSucess: action.payload,
        DataFetching: false,
        DataSort: false
      }
      case EXCHANGE_CURRENCY_FETCH_ERROR:
      return {
        ...state,
        DateError: action.payload,
        DataFetching: true,
        DateError: true,
        DataSort: true
        }
        case COIN_UPDATE_STATE: 
        console.log(action.payload) //This logs the boolean value I am sending
          return {
            DataUpdate: action.payload
          } 
        default:
        return state
      }
    }

Позже я использую его в своем приложении следующим образом

render () {     

          console.log(this.props.cryptoUpdateState)
        if (this.props.cryptoUpdateState) {
            console.log("Inside if render")
            displayData = async () => {
                this.coinURL = await AsyncStorage.getItem("CryptoCurrencySelected").catch((error) => {
                    console.log(error)
                })

                 if (this.coinURL != "undefined" && this.coinURL != null) {
                     console.log("Inside Async", this.coinURL)     
                  this.props.exchangeToDisplay(this.coinURL)
                 }

                 if (this.coinURL == null || this.coinURL == "undefined") {
                    console.log("Null", this.coinURL)     
                    this.coinURL = "BTC"
                 }
            }  
            displayData()
            this.props.coinUpdateState(false)
        }

В приведенном выше фрагменте обратите внимание на начальный console.log, он правильно записывает true в первый раз, после него записывается undefined in console, когда я фактически передаю false (this.props.coinUpdateState(false)).

Также обратите внимание на журналы в моем коде, они записывают в журнал значение, которое я отправляю правильно везде, кроме как на более поздней стадии, где это журналирование не определено (в console.log).

Вопрос: Что я могу здесь делать не так?

1 Ответ

0 голосов
/ 08 октября 2018

Редуктор вернет новую версию состояния вашего приложения.Если вы не хотите терять свое предыдущее состояние, вам необходимо убедиться, что вы всегда возвращаете его с любыми необходимыми дополнениями / модификациями.

Все, что возвращается из сработавшего корпуса коммутатора, будетследующая версия состояния, которая для COIN_UPDATE_STATE будет иметь DataUpdate in.

Убедитесь, что все, что вы делаете ...state для всех ваших действий редуктора, чтобы убедиться, что вы сохраняете состояние.

например

   case COIN_UPDATE_STATE: 
          return {
            ...state,
            DataUpdate: action.payload
          } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...