【问题标题】:How to pass state with React Router?如何使用 React Router 传递状态?
【发布时间】:2018-08-03 21:25:14
【问题描述】:

我正在从 JSON 文件中获取冠军列表的数据,并尝试创建一个链接来查看每个冠军,但不确定如何在 react-router 的链接中传递 img 属性。

我尝试使用state: champion.img,但它没有提供任何东西。任何想法如何传递图像值?

import React, { Component } from 'react'
import axios from 'axios'
import { Link } from 'react-router-dom';
class PersonList extends Component {
    state = {
        persons: [],
        name:"",
           champs: [], 
           isLoaded: false,
        Aatrox:''
    }

    componentDidMount(){
        axios({
            method: 'get',
            url: 'https://api.myjson.com/bins/blcps'
        })
        .then(res => {
            this.setState({ persons: res.data[1]})


            console.log(res.data[0].name);
            console.log('ldldl');


             const champions = res.data.map((champion) => {
            console.log(champion.name)
            console.log(this.state.champs.name)
            return <div classname="container-fluid">
            <div classname="row">
            <p>ldldl</p>

              <h2 className="card-title">{champion.name}</h2>   </div> 

               <img src={champion.img} /> 

               <Link to={{ pathname:`/champions/${champion.name}`,// undefined  state: {champion.img} }} > {champion.name}  </Link>
</div> 


   })


          this.setState({ champs: champions, isLoaded: true });



        })


    }

    render() {
        return (
            <ul>
               {this.state.isLoaded ? <div>{this.state.champs}</div> : <div>.</div>}
            </ul>
        )
    }
}

export default PersonList;

【问题讨论】:

  • 尝试 console.log(champion.img) 检查输出,是否未定义
  • 我实际上并没有得到图像
  • 只是不知道如何将其传递给不同的组件

标签: reactjs


【解决方案1】:

当你console.log(champion.img) 时,你会得到一个完整的网址吗?如果不是,您必须放置文件的完整 url 而不仅仅是文件名才能工作。如何执行此操作取决于从服务器返回的内容。

【讨论】:

  • 我正在获取图片链接的完整网址
  • 您应该为状态中的champion.img 提供一个变量名。像这样state: {img: champion.img} 然后使用var img = this.props.location.state.img 检索值,或者您将完整的冠军传递为状态&lt;Link to={{ pathname:'/champions/${champion}', state: {champion} }} &gt; {champion.name} &lt;/Link&gt; 然后使用var img = this.props.location.state.champion.img 检索
  • 或者您可以将变量设置为champion.img 并传递它而不是状态中的champion.img
  • 这样吗? /champions/${champ.id}, state: { img: champ.img} }} >
  • 然后在其他组件中 var img = this.props.location.state.img img src={img}
猜你喜欢
  • 2017-05-19
  • 2017-05-18
  • 2018-01-29
  • 1970-01-01
  • 2020-08-29
  • 2019-10-19
  • 2021-10-30
  • 1970-01-01
  • 2019-09-29
相关资源
最近更新 更多