当 api 通过 reducer 来自状态时如何使用 axios 获取?
How to fetch using axios when the api comes from a state via reducer?
我想从 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} returns 一个 url 一个特定的口袋妖怪。我想使用此处找到的 url 显示该宠物小精灵的所有详细信息:https://pokeapi.co/
这是从 reducer 返回的对象:
{
name:"bulbasaur"
url:"http://pokeapi.co/api/v2/pokemon/1/"
}
使用 axios 从减速器访问 api 对象的正确方法是什么?
你说的是 reducer,但是直接在你的组件中调用 fetch..你应该调用一个执行 fetching 的动作。
除此之外,您可以在您的 .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
我想从 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} returns 一个 url 一个特定的口袋妖怪。我想使用此处找到的 url 显示该宠物小精灵的所有详细信息:https://pokeapi.co/
这是从 reducer 返回的对象:
{
name:"bulbasaur"
url:"http://pokeapi.co/api/v2/pokemon/1/"
}
使用 axios 从减速器访问 api 对象的正确方法是什么?
你说的是 reducer,但是直接在你的组件中调用 fetch..你应该调用一个执行 fetching 的动作。
除此之外,您可以在您的 .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