RelayMutation期望prop是由Relay提取的数据,为查询不起作用添加变异

时间:2016-06-17 17:36:26

标签: relayjs

我收到错误:

bundle.js:28169 Warning: RelayMutation: Expected prop `group` supplied to `AddBlock` 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.

它可能看起来与this question中描述的问题相似,但答案(确保将变异添加到初始查询中)对我来说不起作用。我在原始查询中已经有了变异。

以下是我的相关代码:

export class AddBlock extends Relay.Mutation {
    getMutation() {
        return Relay.QL`mutation { addBlock }`;
    }

    getVariables() {
        return {
            body: this.props.body
        };
    }

    getFatQuery() {
        return Relay.QL`
            fragment on AddBlock {
                newBlockEdge,
                group {
                    blocks
                }
            }
        `;
    }

    getConfigs() {
        return [{
            type: 'RANGE_ADD',
            parentName: 'group',
            parentID: this.props.group.id,

            connectionName: 'blocks',
            edgeName: 'newBlockEdge',
            rangeBehaviors: {
                '': 'append',
            },
        }];
    }


    getOptimisticResponse() {
        return {
            newBlockEdge: {
                node: {
                    body: this.props.body
                }
            },
            group: {
                id: this.props.group.id
            }
        }
    }


    static get fragments() {
        return {
            group: () => Relay.QL`
                fragment on GroupNode {
                    id
                }
            `,
        }
    }
}


class Designer extends React.Component {
    ...

    addToBlocks(blocks) {
        // Create a mutation to save to the blocks.
        Relay.Store.commitUpdate(
            new AddBlock({
                body: blocks[0].block,
                group: this.props.group
            })
        );
    }
    ...
}


Designer = Relay.createContainer(Designer, {
  fragments: {

    group: (Component) => Relay.QL`
      fragment on GroupNode {
        title
        visibility
        blocks(first: 20) {
            edges {
                node {
                    ${Block.getFragment('block')}
                    ${UpdateBlockBodyMutation.getFragment('block')}
                    position
                    title
                }
            }
        }
        ${AddBlock.getFragment('group')}
      }
    `,
  }
});

我在这里做错了什么?

1 个答案:

答案 0 :(得分:3)

我怀疑你的变异片段实际上并没有被使用 - 你应该运行一个测试,看看如果你在AddBlock片段中添加其他字段,你会发现它们没有被请求。 。?我不是100%肯定为什么(可能是关于static get fragments的东西),但不太确定。

一旦你实际使用了你的变异片段,Relay就不会再抱怨了,因为它会以正确的方式获取数据:D