我是console.log这个,它看起来很完美。
这是记录器图片:https://i.stack.imgur.com/PSRhV.jpg
就像它显示类似这样的initialState - > case 1 - >案例2
renderCoinCards() {
const { crypto } = this.props;
console.log('Crypto.data : '+crypto.data+' , '+'Crypto.isFetching : '+crypto.isFetch)
}
但是当我尝试映射数据时发生了错误。
这是记录器图片:https://i.stack.imgur.com/VpNPF.jpg
它的工作方式与initialState相同 - >停止工作显示错误
renderCoinCards() {
const { crypto } = this.props;
console.log('Crypto.data : '+crypto.data+' , '+'Crypto.isFetching : '+crypto.isFetching+' , '+'Crypto.data.map : '+crypto.data.map((a)=>a.name))
}
你能告诉我为什么以及如何解决它。
这是源代码
组件
class CryptoContainer extends Component {
componentWillMount(){
this.props.Fetchcoin()
}
renderCoinCards() {
const { crypto } = this.props;
console.log('Crypto : '+crypto) //logging
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
答案 0 :(得分:0)
看起来crypto.data
根本不是Array
。这甚至是我们在您的控制台中可以看到的内容。如果crypto.data
为null
,则无法在其上创建地图。
答案 1 :(得分:0)
在映射之前,请确保crypto.data的数组长度大于0.
您可以在映射功能
之前执行此操作from collections import Counter
print(Counter((i[0] for i in d)))
所以它在map功能之前就停止了。如果数组长度大于0,则继续
答案 2 :(得分:0)
Crypto是一个对象数组,但未定义crypto.data。你需要改变
console.log('Crypto.data : '+crypto.data+' , '+'Crypto.isFetching : '+crypto.isFetching+' , '+'Crypto.data.map : '+crypto.data.map((a)=>a.name))
到
console.log('Crypto.data : '+crypto+' , '+'Crypto.isFetching : '+crypto.isFetching+' , '+'Crypto.data.map : '+crypto.map((a)=>a.name))
专门用于映射,更改:
crypto.data.map((a)=>a.name)
到
crypto.map((a)=>a.name)