i want change root query parameter based on this.state.eventid
child component, have no clue how props relay root container. started based on relay-starter-kit.
i have react component has dropdown menu, , onselect setstates eventid
renderattend() { if (this.props.groups != null && this.state.success != true) { var events = this.props.events.map(function(event){ var boundselect = () => {this.setstate({eventid:event.nodes[0].id})} return <menuitem style={{fontsize:20}}eventkey={event.nodes[0].id} onselect={boundselect.bind(this)}>{event.nodes[0].properties.summary} / {event.nodes[0].properties.start}</menuitem> },this) var teams = this.props.groups.map(function(team){ var boundselect = () => {this.setstate({teamid:team.nodes[0].id})} return <menuitem style={{fontsize:20}}eventkey={team.nodes[0].id} onselect={boundselect.bind(this)}>{team.nodes[0].properties.name}</menuitem> },this) return ( <div> <buttongroup> <dropdownbutton style={{padding:"15px",fontsize:20}}title="events" id="bg-vertical-dropdown-2"> {events} </dropdownbutton> <dropdownbutton style={{padding:"15px",fontsize:20,marginleft:"5px"}} title="groups" id="bg-vertical-dropdown-2"> {teams} </dropdownbutton> </buttongroup> </div> ) } }
i want use state somehow change root query... approute... import relay 'react-relay';
export default class extends relay.route { static paramdefinitions = { eventid: {required: false} }; static queries = { event : () => relay.ql`query{eventstate(eventid:$eventid)}`, }; static routename = 'apphomeroute'; }
and app.js
import 'babel-polyfill'; import app './components/app'; import apphomeroute './routes/apphomeroute'; import react 'react'; import reactdom 'react-dom'; import relay 'react-relay'; reactdom.render( <relay.rootcontainer component={app} route= {new apphomeroute} renderloading={function() { return <div style= {{display:"flex",justifycontent:"center",margintop:"55px"}}> <h1>loading...</h1></div>; }} renderfailure={function(error, retry) { return ( <div> <h1>click refresh</h1> </div> ); }} />, document.getelementbyid('root') );
now want this.state.eventid react component update root query, have no idea how pass data child component react root.container. not want use react-router :) p.s. this.props.events passed me ajax call not saved in relay/graphql data.
for such case, better thing wrap root query story like
{ store { events(eventid:$eventid) } }
so in root query have
export default class extends route { static queries = { app:() => relay.ql`query { store }` }; static routename = "approute"; }
and in page create fragemnt like
let relayapp = createcontainer(somecomponent, { initialvariables: { eventid: null }, fragments: { app: () => relay.ql ` fragment on store { id events(eventid: $eventid) { pageinfo { hasnextpage } edges { cursor node { name ... } } } } `, }, }); export default relayapp;
for child component, set eventid , onchange event handler props parent component. , in parent componet implement event handler , call this.props.setvariables({eventid: someval}) like
// child component export default class menu extends component { render() { return( <ul> <li onclick={() => this.props.selectitem(val)}>{val}</li> ... </ul> ) } } // parent component class main extends component { _selectitem = (val) => { this.props.relay.setvariables({eventid: val}); } render() { return( <div> <menu selectitem={() => this._selectitem}/> </div> ) } } let relayapp = ... export default main
hope help.
Comments
Post a Comment