首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套的React/Relay组件没有接收道具

嵌套的React/Relay组件没有接收道具
EN

Stack Overflow用户
提问于 2016-04-16 00:07:45
回答 1查看 1.1K关注 0票数 5

我试图将一个属性传递给另一个组件。将数组作为<VideoList videos={this.props.channel.video_list}></VideoList>传递会导致this.props.videos为空对象:

代码语言:javascript
复制
{
  "videos": {
    "__dataID__": "client:5610611954",
    "__fragments__": {
      "2::client": "client:5610611954"
    }
  }
}

(GraphQL返回由returns扩展确认的正确数据,只是没有传递给VideoList。)

components/video_list.js

代码语言:javascript
复制
import React from 'react'
import Relay from 'react-relay'
import VideoItem from '../containers/video_item'    

export default class VideoList extends React.Component {
  render() {
    return(
      <div>
      {
        this.props.videos.edges.map(video =>
          <VideoItem key={video.id} video={video.node}/>
        )
      }
      </div>
    )
  }
}

components/channel_list.js

代码语言:javascript
复制
import React from 'react'
import Relay from 'react-relay'
import VideoList from './video_list'

export default class ChannelView extends React.Component {
  render() {
    return(
      <div>
        <Column small={24}>
          <h2>{this.props.channel.title}</h2>
        </Column>

        <VideoList videos={this.props.channel.video_list}></VideoList>
      </div>


    )
  }
}

containers/channel_list.js

代码语言:javascript
复制
import React from 'react'
import Relay from 'react-relay'
import ChannelView from '../components/channel_view'
import VideoList from './video_list'

export default Relay.createContainer(ChannelView, {
  fragments: {
    channel: () => Relay.QL`
      fragment on Channel {
        title
        video_list {
          ${VideoList.getFragment('videos')}
        }
      }`
  },
});

containers/video_list.js

代码语言:javascript
复制
import React from 'react'
import Relay from 'react-relay'
import VideoList from '../components/video_list'
import VideoItem from './video_item'

export default Relay.createContainer(VideoList, {
  initialVariables: {
    count: 28
  },
  fragments: {
    videos: () => Relay.QL`
      fragment on Videos {
        videos(first: $count) {
          pageInfo {
            hasPreviousPage
            hasNextPage
          }
          edges {
            node {
              ${VideoItem.getFragment('video')}
            }
          }
        }
      }`
  },
});

我做错了什么?我是不是误解了继电器的工作原理?我希望能够为分页目的在VideoList中设置VideoList中继变量。VideoList对象将嵌套在多个其他组件中(例如通道、最受欢迎的、用户的收藏等)。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-16 01:12:58

您正在尝试直接使用VideoList组件,而不使用中继容器包装它,这是错误的。您需要使用VideoList包装版本--在./containers/video_list.js中导出的版本。

如下所示:

代码语言:javascript
复制
import React from 'react'
import Relay from 'react-relay'
import VideoList from '../containers/video_list'

export default class ChannelView extends React.Component {
  render() {
    return(
      <div>
        <Column small={24}>
          <h2>{this.props.channel.title}</h2>
        </Column>

        <VideoList videos={this.props.channel.video_list}></VideoList>
      </div>


    )
  }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36658671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档