Ash*_*ams 5 javascript reactjs graphql relayjs
我正在尝试将属性传递到另一个组件。将数组作为<VideoList videos={this.props.channel.video_list}></VideoList>结果传递会this.props.videos成为一个空对象:
{
"videos": {
"__dataID__": "client:5610611954",
"__fragments__": {
"2::client": "client:5610611954"
}
}
}
Run Code Online (Sandbox Code Playgroud)
(GraphQL根据React Chrome扩展程序的确认返回了正确的数据,只是没有传递给VideoList。)
组件/video_list.js
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>
)
}
}
Run Code Online (Sandbox Code Playgroud)
组件/channel_list.js
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>
)
}
}
Run Code Online (Sandbox Code Playgroud)
容器/channel_list.js
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')}
}
}`
},
});
Run Code Online (Sandbox Code Playgroud)
容器/video_list.js
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')}
}
}
}
}`
},
});
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我是否误解了中继的工作方式?我希望能够count在中VideoList为分页目的设置中继变量。该VideoList对象将嵌套在多个其他组件中(例如,频道,最受欢迎,用户的收藏夹等)。
谢谢!
您尝试VideoList直接使用该组件,而不用中继容器包装它,这是错误的。您需要使用VideoList打包版本 - 您要导出的版本./containers/video_list.js。
像这样:
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>
)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
993 次 |
| 最近记录: |