我想从reducer返回的状态中获取一个api。 这是我的容器:PokeDetailApi.js

import React, {Component} from "react"; 
import {connect} from "react-redux"; 
import axios from "axios"; 
 
class PokeDetailApi extends Component{ 
    constructor(){ 
        super(); 
        this.state = { 
            pokedetails:"" 
        } 
    } 
 
    componentDidMount(){ 
        axios.get({this.props.pokemon.url}).then( (obj) => { 
            this.setState({ 
                pokedetails: obj.data.results 
            }); 
        }); 
    } 
 
    render(){ 
        if(!this.props.pokemon){ 
            return ( 
                <div> 
                    <h1>Please select a pokemon.</h1> 
                </div> 
            ) 
        } 
 
        // const url = this.props.pokemon.url; 
        const urlapi = this.state.pokedetails; 
 
        console.log(url); 
        console.log(urlapi); 
 
        return( 
            <div> 
                <p>{this.props.pokemon.name}</p> 
            </div> 
        ) 
    } 
} 
 
function mapStateToProps(state){ 
    return { 
        pokemon: state.selected_pokemon 
    } 
} 
 
export default connect(mapStateToProps)(PokeDetailApi); 

{this.props.pokemon.url} 返回特定 pokemon 的 url。我想使用此处找到的网址显示该神奇宝贝的所有详细信息:https://pokeapi.co/

这是reducer返回的对象:

{ 
    name:"bulbasaur" 
    url:"http://pokeapi.co/api/v2/pokemon/1/" 
} 

使用axios从reducer的api访问对象的正确方法是什么?

请您参考如下方法:

您正在谈论 reducer ,但直接在组件中调用 fetch..您应该调用执行提取操作。

除此之外,您可以在 .then 中使用第一次提取的结果(pokedetails)执行另一次提取,而不是在渲染中:

axios.get(this.props.pokemon.url) 
  .then(res => res.data.results) 
  .then(axios.get) // fetch on pokedetails 
  .then(console.log) // console.log result, here you could setState results 


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!