14

最初にオブジェクトを追加してからその名前を設定するためにネストしている 2 つの Relay ミューテーションがあります。私が 2 番目のミューテーションに渡しているのは、実際には Relay によってフェッチされたデータだと思いますが、私には同意できないようです。React ビューのコードは次のとおりです。

Relay.Store.update(
        new AddCampaignFeatureLabelMutation({
            campaign: this.props.campaign
        }),
        {
            onSuccess: (data) => {
                Relay.Store.update(
                    new FeatureLabelNameMutation({
                        featureLabel: data.addCampaignFeatureLabel.featureLabelEdge.node,
                        name: this.addLabelInputField.value
                    })
                );
            },
            onFailure: () => {}
        }
    );

これは機能しますが、警告が表示されます。

Warning: RelayMutation: Expected prop `featureLabel` supplied to `FeatureLabelNameMutation` to be data fetched by Relay. This is likely an error unless you are purposely passing in mock data that conforms to the shape of this mutation's fragment.

Relayがデータがフェッチされていないと判断するのはなぜですか? どうにかしてペイロードで新しい featureLabel を明示的に返す必要があるのでしょうか?

4

2 に答える 2

42

私は同じ問題に遭遇し、何が起こっているのかを理解するのに時間がかかったので、これは他の人を助けるかもしれません:

警告が示すように、リレーによってフェッチされたミューテーションにエンティティを提供する必要があります。しかし、警告が言っていないことは、ミューテーションを念頭に置いてフェッチする必要があるということです。

したがって、基本的には、次のように最初のクエリで将来実行するミューテーションを追加する必要があります。

          fragment on Person {
            firstname,
            lastname,
            language,
            ${UpdatePersonMutation.getFragment('person')}
          }

これにより、ストア内のエンティティに必要な部分が追加され、ミューテーションで必要になります。

あなたの場合、あなたがしなければならないことは、クエリに追加することFeatureLabelNameMutation getFragmentですAddCampaignFeatureLabelMutation。これにより、警告なしで成功するfeatureLabelために必要な情報を含むエンティティが返されます。FeatureLabelNameMutation

リレーのドキュメントは、この分野や他の多くの分野で非常に貧弱です。

于 2016-01-13T20:05:45.057 に答える