let React = require('react'); let ReactDOM = require('react-dom'); let Relay = require('react-relay'); class Item extends React.Component { render() { let item = this.props.store; return (

{item.title}

{item.score} - {item.by.id}


); } }; Item = Relay.createContainer(Item, { fragments: { store: () => Relay.QL` fragment on HackerNewsItem { id title, score, url by { id } } `, }, }); class TopItems extends React.Component { render() { let items = this.props.store.stories.map( (store, idx) => ); let variables = this.props.relay.variables; let currentStoryType = (this.state && this.state.storyType) || variables.storyType; return
{ items }
; } _onChange(ev) { let storyType = ev.target.value; this.setState({ storyType }); this.props.relay.setVariables({ storyType }); } } TopItems = Relay.createContainer(TopItems, { initialVariables: { storyType: "top" }, fragments: { store: () => Relay.QL` fragment on HackerNewsAPI { stories(storyType: $storyType) { ${Item.getFragment('store')} }, } `, }, }); class HackerNewsRoute extends Relay.Route { static routeName = 'HackerNewsRoute'; static queries = { store: ((Component) => { return Relay.QL` query root { hn { ${Component.getFragment('store')} }, } `}), }; } Relay.injectNetworkLayer( new Relay.DefaultNetworkLayer('https://www.graphqlHub.com/graphql') ); let mountNode = document.getElementById('container'); let rootComponent = ; ReactDOM.render(rootComponent, mountNode);