【问题标题】:Redux data undefinedRedux 数据未定义
【发布时间】:2018-03-10 08:08:03
【问题描述】:


在记录器中看到任何正常数据加载成功。
你可以通过这个链接看到它https://i.stack.imgur.com/uTLpr.jpg
但是为什么这个加密道具是未定义的以及如何修复它。 有人知道吗?


组件

   class CryptoContainer extends Component {
           componentWillMount(){
             this.props.Fetchcoin()
           }


    renderCoinCards() {
                 const { crypto } = this.props;
                 console.log('Crypto : '+crypto) 
     return crypto.data.map((coin,index) => //Add this 
        <CoinCard 
            key={coin.name}
            coin_name={coin.name}
            symbol={coin.symbol}
            price_usd={coin.price_usd}
            percent_change_24h={coin.percent_change_24h}
            percent_change_7d={coin.percent_change_7d}
        />
    ) 
}  
         }


         function mapStatetoProps(state){
           return{
             crypto:state.crypto  
           }
         }

         export default connect(mapStatetoProps,{Fetchcoin})(CryptoContainer)
>

动作

export default function FetchCoin(){
    return dispatch => {
        dispatch({type:FETCHING_COIN_DATA})
        return axios.get(`https://api.coinmarketcap.com//v1/ticker/?limit=10`)
            .then(res => {
                dispatch({type:FETCHING_COIN_DATA_SUCCESS,payload:res.data})
            })
            .catch(err => {
                dispatch({type:FETCHING_COIN_DATA_FAIL,payload:err.data})
            })
    }
}

减速器

 const initialState = {
        isFetching: null,
        data: [],
        hasError: false,
        errorMessage: null
    }
    export default function (state = initialState, action) {
        switch (action.type) {
            case FETCHING_COIN_DATA:
                return Object.assign({}, state, {
                    isFetching: true,
                    data: null,
                    hasError: false,
                    errorMessage: null
                })
            case FETCHING_COIN_DATA_SUCCESS:
                return Object.assign({}, state, {
                    isFetching: false,
                    data: action.payload,
                    hasError: false,
                    errorMessage: null
                })
            case FETCHING_COIN_DATA_FAIL:
                return Object.assign({}, state, {
                    isFetching: false,
                    data: action.payload,
                    hasError: true,
                    errorMessage: action.err
                })
            default:
                return state
        }
    }

并存储

const middleware = applyMiddleware(thunk,promise,logger)

const rootReducer = combineReducers({
    crypto:CyptoReducer
})

const Store = createStore(
    rootReducer,middleware
)

export default Store

我修复了 store 中的拼写错误,但是当我在 renderCoinCard 中添加 crypto.data.map() 数据似乎仍然无法显示调试器

TypeError: 无法读取 null 的属性“地图”

【问题讨论】:

  • 这里是在黑暗中拍摄的,但似乎没有在减速器的状态上设置crypto 的地方。您从有效负载中设置data,但在您的mapStateToProps 中,您从状态中提取crypto
  • 不确定您在哪里调用渲染函数,但可能只是在数据准备好之前调用了 renderCoins()。在尝试对尚不可用的数据进行映射之前,您可能只想执行if (!crypto.data) return false; 保护功能。

标签: javascript react-native redux axios


【解决方案1】:

我认为你的 rootReducer 声明有问题。这里你提到的是 "cypto" 而不是 "crypto"。修复这个问题,它会起作用,因为这里只有 redux 声明了一个 reducer,而且你在这里声明为“cypto”,它需要“cypto”并且失败了。

【讨论】:

  • 感谢您的回答,但加密中的数据值仍然为空。
  • 奇怪的是,除了“crypto:CyptoReducer”之外,一切似乎都很好,但我认为这是你这边的错字,所以没关系。再次从本教程 medium.com/react-native-training/… 进行交叉检查,您在开发此应用程序时可能已遵循该教程以检查您是否遗漏了任何内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-10
  • 1970-01-01
  • 2017-01-17
  • 2018-08-17
  • 2021-10-22
  • 1970-01-01
相关资源
最近更新 更多