中继:乐观更新不会导致组件重新渲染

时间:2016-10-24 09:05:16

标签: graphql relayjs relay

我正在使用PostgraphQL(https://github.com/calebmer/postgraphql)和Relay,并将UpdateQuestionMutation连接到我的应用中。但是,我没有乐观的更新工作。
(当我在chrome中启用网络限制时,我可以看到乐观更新得到处理,但组件仍然显示旧标题。)
我错过了什么吗?我有以下几件:

class QuestionClass extends Component<IQuestion, void> {

save = (item) => {
    this.props.relay.commitUpdate(
        new UpdateQuestionMutation({store: this.props.store, patch: item})
    );
    this.isEditing = false;
};

public render(): JSX.Element {
    const item = this.props.store;
    console.log(item);

...

const Question = Relay.createContainer(QuestionClass, {
    fragments: {
        // The property name here reflects what is added to `this.props` above.
        // This template string will be parsed by babel-relay-plugin.
        store: () => Relay.QL`
            fragment on Question {
                ${UpdateQuestionMutation.getFragment('store')}
                title
                description
                userByAuthor {
                    ${User.getFragment('store')}
                }
            }`,
    },
});

...

export default class UpdateQuestionMutation extends Relay.Mutation<any, any> {
    getMutation() {
        return Relay.QL `mutation { updateQuestion }`
    }

    getVariables() {
        console.log(this.props);
        return {
            id: this.props.store.id,
            questionPatch: this.props.patch
        }
    }

    getFatQuery() {
        return Relay.QL `fragment on UpdateQuestionPayload { question }`
    }

    getConfigs() {
        return [{
            type: "FIELDS_CHANGE",
            fieldIDs: {
                question: this.props.store.id
            }
        }]
    }

    getOptimisticResponse() {
        return {
            store: this.props.patch
        }
    }

    // This mutation has a hard dependency on the question's ID. We specify this
    // dependency declaratively here as a GraphQL query fragment. Relay will
    // use this fragment to ensure that the question's ID is available wherever
    // this mutation is used.
    static fragments = {
        store: () => Relay.QL`
          fragment on Question {
            id
          }
        `,
    };
}

编辑:这就是我在postgraphql日志中看到的内容: mutation UpdateQuestion($input_0: UpdateQuestionInput!) { updateQuestion(input: $input_0) { clientMutationId ...F1 } } fragment F0 on Question { id rowId title description userByAuthor { id rowId username } } fragment F1 on UpdateQuestionPayload { question { id ...F0 } }

0 个答案:

没有答案