如何访问子组件内部传递的prop数组

Posted

技术标签:

【中文标题】如何访问子组件内部传递的prop数组【英文标题】:How to access the passed prop array inside the child component 【发布时间】:2019-12-08 20:38:53 【问题描述】:

我正在尝试将一组场所作为状态道具从父组件访问到子组件文件。数组 'Venues' 有一组属性,每个属性都像venue.name 和venue.location.address

我可以看到 prop 已成功传递,但是当我尝试映射数组(作为名称)时:它只显示数组中的项目数,并且在 div 'code' 中传递的数组本身为空。

import DropDown from './DropDown.js';

class App extends Component 

  state = 
    venues : []
  

  componentDidMount() 
    this.getVenues()
  

场地位置来自以下第三方 API

  getVenues = () => 
    const endPoint = "https://api.foursquare.com/v2/venues/explore?"
    const parameters = 
      client_id: "CFSJXP",
      query: "Outdoors & Recreation",
      near: "Singapore",
      v: "20200404"
    
   )

  

  render() 
    return (

               <DropDown dataFromApp = this.state.venues />

      )
  

然后在组件文件中

  render () 
    return (

        <section>
          <h4>Location details</h4>
         ``` <div className='code'>
            this.props.dataFromApp.map((item,venue) => <li key=venue>item</li>)
          </div> ```
        </section>
      </section>
    )
  

当我尝试对数组进行字符串化时,会引发以下错误:

对象作为 React 子对象无效(找到:带键的对象 reasons, 地点,referId)。如果您打算渲染一组孩子,请使用 而是一个数组。

如何将 prop 数据传递到 div 'code' 中,然后在侧边栏显示其数据?

【问题讨论】:

setState() 在哪里? 你是如何获取数据的?您如何在状态中存储数据? 【参考方案1】:

试试这个

 <div className='code'>
            this.props.dataFromApp.map((item,venue) => <li key=venue>item.venue</li>)
 </div>

【讨论】:

他在li 值中使用item.venue 而不是item 进行了更改。 这个答案不是基于代码,而是一个假设【参考方案2】:

问题只在这里,

this.props.dataFromApp.map((item,venue) => <li key=venue>item</li>)

您正在直接尝试渲染item,它是object,而不是普通数据。

您的错误也说明了同样的情况,

(找到:带有键 reasons、venue、referrId 的对象)

表示item = reasons="", venue="", referralId=""

你必须这样做,

this.props.dataFromApp.map(item => <li key=item.referralId>item.venue</li>)

【讨论】:

就是这样!非常感谢。只是在 item.venue this.props.dataFromApp.map(item => item.venue.name) 之后添加了 name 属性 是的,这取决于您的数据结构。【参考方案3】:

在构造函数中包装状态

constructor()
  super();
  this.state = 
    venues : []
  ;

在 getVenues() 函数中使用设置场地

this.setState( venues: // the response from the third party API );

【讨论】:

【参考方案4】:

错误表示您正在 DOM 中渲染一个对象,您不能这样做,您必须渲染对象的单个键或渲染多个键,您必须遍历键。

你的错误

    首先,您没有以本地状态存储数据。使用this.setState(venues : [response array here])

    其次,您应该在&lt;li key=venue&gt;item&lt;/li&gt; 中定义场地对象的键,例如&lt;li key=venue&gt;item.key&lt;/li&gt;

【讨论】:

以上是关于如何访问子组件内部传递的prop数组的主要内容,如果未能解决你的问题,请参考以下文章

在无状态子组件中传递/访问道具

Vue父子组件通信(父级向子级传递数据子级向父级传递数据Vue父子组件存储到data数据的访问)

如何在子组件中访问根组件的状态值

Vue.js - 如何将 prop 作为 json 数组传递并在子组件中正确使用?

VUE中父组件向子组件传递数据 props使用

Vue prop传一个对象给子组件,怎么避免子组件修改数据污染父组件?