【发布时间】: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