Redux状态出来是不确定的

时间:2018-10-08 08:09:04

标签: reactjs redux

我很难弄清楚为什么在以后的阶段中我的redux状态变得不确定。

所以我有一个看起来像这样的动作

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,然后在我实际传递false时记录undefined in console {{1 }} )。

还要注意我的代码中的日志,除了正在记录未定义的后期阶段(在console.log中),它们还在记录我正确发送的值。

问题:我在这里可能做错了什么?

1 个答案:

答案 0 :(得分:0)

Reducer将返回您应用程序状态的新版本。如果您不想丢失以前的状态,则需要确保始终返回所需的任何添加/修改。

从触发切换的情况返回的任何结果都将是下一个状态版本,对于COIN_UPDATE_STATE,状态将仅包含DataUpdate

对于所有的redux reducer操作,请确保您正在做...state,以确保您保持状态。

例如

   case COIN_UPDATE_STATE: 
          return {
            ...state,
            DataUpdate: action.payload
          }