Hiện tại em đang tập làm 1 app sử dụng Redux.
Em có gặp một vấn đề là: không gọi được data trong state của redux
Mong mọi người chỉ giúp e ạ. em cảm ơn
Các bước thực hiện:
- get data từ api + lưu vào state redux
- gọi ra được danh sách items
- click vào mỗi item sẽ chuyển sang 1 đường link dạng
/champ/:id
để hiện ra thông tin của item. - Nhưng bị lỗi data undefined, em đã gọi data của
mapStateToProps
ở trongcomponentDidMount()
nhưng nó không có j cả
Đây là action của redux
export const listChampion = () => {
return (dispatch) => {
return axios.get(`${DDRAGON_URL}/${VERSION}/data/en_US/champion.json`)
.then(res => {
// handle success
const payload = res.data.data
dispatch({type: 'CHAMPION_LIST', payload})
return res.data.data
})
.catch(function (error) {
// handle error
console.log(error);
})
}
}
Đây là Component Champion detail
class ChampionDetail extends Component {
constructor(props) {
super()
this.state = {
...this.state,
champion: {}
}
}
componentDidMount() {
this.props.getAllChampions()
const id = this.props.match.params.id
const { champions } = this.props
const champion = champions.data[id] //undefined
console.log('champs', champions.data)
console.log('champ', champion) //undefined
console.log('id', id)
}
render() {
const { champion } = this.props
console.log('champ', champion)
return (
<>
{champion.name}
</>
)
}
}
const mapStateToProps = (state) => {
//Lấy data từ state đã lưu ở trang danh sách trước
const { champions } = state
console.log('champ',champions)
return {
champions
}
}
const mapDispatchToProps = (dispatch) => {
return {
getAllChampions: () => {
return dispatch(listChampion())
}
}
}
export default connect(mapStateToProps, mapDispatchToProps)(ChampionDetail)