2016-03-25 6 views
3

Ich bin neu in Relay und habe ein Problem mit verschachtelten Daten auf einem Fragment.Verschachtelte Fragmentdaten immer die gleichen in Relay

Die folgende Abfrage gibt die richtigen Daten zurück, wenn ich es in graphiql teste, also bin ich zuversichtlich, dass mein Schema korrekt ist.

{ 
    viewer { 
    customers { 
     name 
     billing_address { 
     city 
     } 
    } 
    } 
} 

Allerdings, wenn ich die obige Abfrage mit Relay verwenden die customer.name richtig sein, aber customer.billing_address.city ist für jeden Kunden. Es ist verwirrend für mich, warum einige der Daten korrekt sind, während die verschachtelten Daten einfach kopiert werden.

Ich würde jede mögliche Hilfe mit dem Problem schätzen und wenn mehr Informationen benötigt werden, würde ich mich freuen, es hinzuzufügen. Unten ist der einzige Relay-Code, der momentan in meinem Projekt ist und wo ich glaube, dass das Problem sein könnte.

class App extends Component { 
    render() { 
    console.log(this.props.viewer.customers); 
    return (
     <div> 
     {this.props.viewer.customers.map((customer) => (
     <div> 
      <div>{customer.name}</div> 
      <div>{customer.billing_address.city}</div> 
     </div> 
    ))} 
     </div> 
    ); 
    } 
} 

class AppHomeRoute extends Relay.Route { 
    static queries = { 
    viewer:() => Relay.QL` 
     query { 
     viewer 
     } 
    `, 
    }; 
    static routeName = 'AppHomeRoute'; 
} 

const AppContainer = Relay.createContainer(App, { 
    fragments: { 
    viewer:() => Relay.QL` 
     fragment on Viewer { 
     customers{ 
      name 
      billing_address{ 
      city 
      } 
     } 
     }` 
    }, 
}); 

ReactDOM.render(
    <Relay.RootContainer 
    Component={AppContainer} 
    route={new AppHomeRoute()} 
    />, 
    document.getElementById('root') 
); 
+1

Ein mögliches Problem könnte darin bestehen, wie Sie die Rechnungsadresse in Ihrem GraphQL-Schema auflösen. Haben Sie in Ihrem Graphica-Typ billing_address ein Feld "field: id,! Types.ID" oder "globalIdField" eingefügt? Das Posten Ihres GraphQL-Schemas kann auch helfen. – nethsix

+0

@nethsix Vielen Dank für Ihre Hilfe. Das war im Wesentlichen das Problem. Ich verwende Mongo für mein Backend und verwendete ein eingebettetes Dokument, für das Mongo keine ObjectID bereitstellte, obwohl ich versuchte, auf das in meinem Schema zuzugreifen. Ich wechselte gerade von eingebettet zu einem Ref in Mongo und es funktionierte perfekt. Danke noch einmal. –

+0

Ich bin froh, dass der Vorschlag geholfen hat. Stört es Sie, wenn ich die Kommentare als Antwort auf die Frage verschiebe? – nethsix

Antwort

1

Ein mögliches Problem könnte darin bestehen, wie Sie die Rechnungsadresse in Ihrem GraphQL-Schema auflösen. Haben Sie eine field :id, !types.ID oder globalIdField in Ihrem Graphica-Typ billing_address angegeben? Das Posten Ihres GraphQL-Schemas kann auch helfen.

Verwandte Themen