Подтвердить что ты не робот

Реле-мутация ожидает, что данные, полученные с помощью реле

У меня есть две мутации Relay, которые я вложил, чтобы сначала добавить объект, а затем установить его имя. Я верю, что то, что я перехожу ко второй мутации, на самом деле является данными, полученными Relay, но, похоже, со мной не согласен. Код в представлении "Реакт" выглядит следующим образом:

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 fragment.

Почему Relay считает, что данные не получены? Возможно, мне нужно явно возвратить новую featureLabel в полезной нагрузке?

4b9b3361

Ответ 1

Я столкнулся с той же проблемой, и мне потребовалось некоторое время, чтобы выяснить, что происходит, чтобы это могло помочь другим:

Как говорится в предупреждении, вы должны предоставить сущность мутации, которая была выбрана Relay. НО что предупреждение не говорит, так это то, что оно должно быть вызвано мутацией в виду.

Итак, в основном вы должны добавить мутацию, которую вы собираетесь выполнить в будущем в первоначальном запросе:

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

Это добавит необходимые фрагменты к сущности в хранилище, которые необходимы мутации.

В вашем случае вам нужно добавить FeatureLabelNameMutation getFragment к вашему запросу AddCampaignFeatureLabelMutation. Это приведет к возврату вашего объекта featureLabel с необходимой информацией для FeatureLabelNameMutation для успеха без предупреждения.

Документация Relay очень бедна в этой и многих других областях.

Ответ 2

Relay ожидает, что любые фрагменты вашей мутации будут получены из вашего props. Поскольку вы используете data, исходящий из вашего обратного вызова, а не что-то из реквизитов вашего контейнера, реле вызывает это предупреждение.

Взгляните на источник: https://github.com/facebook/relay/blob/master/src/mutation/RelayMutation.js#L289-L307