2017-08-06 2 views
4

Mit "Can not Feld Fund ({}) auf dem Objekt (ROOT_QUERY) finden": "reagieren-apollo": "^ 1.4.3"Apollo-Client (reagieren) - Update auf Mutation erstellen -

In der Elternkomponente frage ich mit GraphQL einen Elternknoten 'Fund' mit Kindern 'fundQuarterlyMetric' ab. Dies gibt Daten in folgendem Format:

{  
    id 
    name 
    ... 
    fundQuarterlyMetrics (orderBy: asAtDate_ASC) { 
    id 
    year 
    quarter 
    ... 
    } 
} 

Wenn ich versuche, eine neue fundQuarterlyMetrics ich auf react-apollo mit der Update-Funktion (Apollo Client docs), um den lokalen Speicher aktualisieren zu erstellen. Es gibt mir eine Fehlermeldung:

Can't find field Fund({}) on object (ROOT_QUERY) { 
    "Fund({\"id\":\"cj57hpfips0x7014414u5tk8m\"})": { 
    "type": "id", 
    "id": "Fund:cj57hpfips0x7014414u5tk8m", 
    "generated": false 
    } 

Die Sache ist, ist, dass, wenn ich den Proxy console.log ich den Fond sehen und es ist Kinder unter Daten .... nicht sicher, was ..

zu tun

UPDATE folgenden Kommentar:

ist die Komponente Datenanforderung parent:

export const fundPageQuery = gql` 
query Fund($fundId: ID!) { 
Fund(id: $fundId) { 
    id 
    name 
    ....other variables 
    fundQuarterlyMetrics (orderBy: asAtDate_ASC) { 
    id 
    year 
    quarter 
    ....other variables 
    } 
} 

} `;

Hier sind die Optionen, die ich verwendet:

var optionsForCreateFundMetric = { 
update: (proxy, {data: {createFundMetrics}}) => { 
try { 
    console.log('proxy', proxy); 
    const data = proxy.readQuery({query: FundQL.fundPageQuery}); 
    console.log('data', data); 
    data.Fund.fundQuarterlyMetrics.push(createFundMetrics); 
    proxy.writeQuery({query: FundQL.fundPageQuery, data}) 
} catch (e) { 
    console.log('error adding to store', e); 
} 

} };

export default compose(
graphql(FundQL.createFundMetrics, {name: 'createFundMetrics', options: 
optionsForCreateFundMetric}), 
graphql(FundQL.updateFundMetrics, {name: 'updateFundMetrics'}) 
)(FundMetricsForm); 

Hier ist meine schaffen Mutation:

export const createFundMetrics = gql` 
mutation createFundQuarterlyMetric(
$fundId: ID 
$year: Int! 
$quarter: FUND_QUARTERLY_METRIC_QUARTER! 
$netIRR: Float! 
$tvpi: Float! 
$rvpi: Float! 
$dpi: Float! 
$asAtDate: DateTime 
$calledThisQuarter: Float! 
$distributedThisQuarter: Float! 
$cumulativeCalled: Float! 
$cumulativeDistributed: Float! 
$limitedPartnersNAV: Float! 
$quarterlyValuationChangeLCY: Float 
$quarterlyTotalReturn: Float 
) { 
createFundQuarterlyMetric(
    fundId: $fundId 
    year: $year 
    quarter: $quarter 
    netIRR: $netIRR 
    tvpi: $tvpi 
    rvpi: $rvpi 
    dpi: $dpi 
    asAtDate: $asAtDate 
    calledThisQuarter: $calledThisQuarter 
    distributedThisQuarter: $distributedThisQuarter 
    cumulativeCalled: $cumulativeCalled 
    cumulativeDistributed: $cumulativeDistributed 
    limitedPartnersNAV: $limitedPartnersNAV 
    quarterlyValuationChangeLCY: $quarterlyValuationChangeLCY 
    quarterlyTotalReturn: $quarterlyTotalReturn 
) { 
    id 
    year 
    quarter 
    netIRR 
    tvpi 
    rvpi 
    dpi 
    asAtDate 
    calledThisQuarter 
    distributedThisQuarter 
    cumulativeCalled 
    cumulativeDistributed 
    limitedPartnersNAV 
    quarterlyValuationChangeLCY 
    quarterlyTotalReturn 
} 

} `;

LÖSUNG Dank Daniel - ich musste die Fonds-ID zurückgeben, damit es funktioniert, also danke!

export default compose(
graphql(FundQL.createFundMetrics, {name: 'createFundMetrics', options: 
optionsForCreateFundMetric, variables: {fundId: 
createFundQuarterlyMetric.fund.id}}), 
graphql(FundQL.updateFundMetrics, {name: 'updateFundMetrics'}) 
)(FundMetricsForm); 
+0

Es klingt wie es ein Problem mit der Art und Weise ist sind Sie Ihre Mutation durch Apollo Ausführung - sollte man nicht Wenn Sie mit Mutationen zu tun haben, sehen Sie Fehler in Ihrer Root-Abfrage. Bitte aktualisieren Sie Ihre Frage, um Ihren Code einzuschließen, insbesondere dort, wo Sie Ihre graphql HOC und jede relevante Logik definieren (wie Ihren Aufruf zum 'update'). –

+0

Danke Dan für deinen Kommentar. Ich habe den Code zur Frage hinzugefügt – Blackstone4

Antwort

6

Die Apollo docs tun einen schlechten Job, diese Tatsache zu betonen, aber wenn man readQuery rufen Sie einen zuvor geholten Abfrage aus dem Laden zu bekommen, wenn die Abfrage alle Variablen haben, müssen Sie in den gleichen Variablen übergeben es abrufen. Unter der Annahme, die ID durch Mutation zurückgegeben wird die ID des Fonds, sollten Sie in der Lage sein, nur diese Zeile zu ändern:

const data = proxy.readQuery({query: FundQL.fundPageQuery, variables: { id: createFundMetrics.id } }); 
+0

Dank Daniel - das hat funktioniert, also musste ich die Fonds-ID zurückgeben, damit es funktioniert -> {fundId: createFundQuarterlyMetric.fund.id} und es hat funktioniert! Ich danke dir sehr! – Blackstone4

+0

Ich habe versucht zu wählen, aber ich habe nicht genug Cred hier ... – Blackstone4

+0

@ Blackstone4 Kein Problem, froh, dass es funktioniert :) Sie können immer noch akzeptieren, dass als die richtige Antwort –

Verwandte Themen