2016-11-21 7 views
3

Wenn ich versuche, eine Variable festzulegen, wird die Komponente erst aktualisiert, wenn der Abruf abgeschlossen ist. Hier ist ein Beispielcode.Relais reagieren pendingVariables immer null nach setVariables

class RelayExample extends React.Component { 
    setVars() { 
    this.props.relay.setVariables({id: '2'}); 
    }; 
    render() { 
    console.log(this.props.relay.pendingVariables); 
    return (
     <div> 
     <button onClick={this.setVars.bind(this)}>set variable</button> 
     </div> 
    ); 
    } 
} 

RelayExample = Relay.createContainer(RelayExample, { 
    initialVariables: { 
    id: '1' 
    }, 
    fragments: { 
    userStore:()=> { 
     return Relay.QL` 
     fragment on userStore { 
     user(id:$id){ 
      email 
     } 
     } 
     `; 
    } 
    } 
}); 

ReactDOM.render(
    <Relay.RootContainer Component={RelayExample} route={new TestQuery()}/>, 
    document.getElementById('app') 
); 

Wenn ich die Taste drücken, bekomme ich dieses Ergebnis in der Konsole: enter image description here

Auch wenn ich Forceupdate verwende direkt nach der setVariables Funktion, i ähnliches Ergebnis erhalten.

setVars() { 
     this.props.relay.setVariables({id: '2'}); 
     this.forceUpdate(); 
}; 

enter image description here

+0

Die Umgebung ist Relay.Store –

Antwort

-1

Ich glaube, dass dieses Verhalten vorgesehen ist.

pendingVariables den Satz von Variablen enthält, die die neuen Requisiten fetch verwendet werden, dh wenn this.props.relay.setVariables() oder this.props.relay.forceFetch() aufgerufen werden, und die entsprechenden Anfrage ist im Flug.

Wenn keine Anfrage im Flug pendingVariables ist null.

Wenn Sie das Konsolenprotokoll direkt nach dem Festlegen Ihrer Variablen aufrufen, sollten Sie sie in pendingVariables sehen.

+0

wenn ich nicht falsch bin, nach [this] (https://facebook.github.io/relay/docs/api-reference-relay-container.html#pendingvariables) Beispiel der Die Komponente muss nach setVariables aktualisiert werden, und die pendingVariables müssen erfüllt sein. –

+1

Dies ist nicht das beabsichtigte Verhalten. Habe dasselbe Problem hier. – whitep4nther