2017-09-24 13 views
0

graphQL apolloの突然変異に問題があります。ページがロードされると、クエリlectureResponseQueryが実行され、クエリ== nullの場合は、fetchLectureResponseMutationが実行されて新しいドキュメントが作成されます。この突然変異は新しい結果を返し、クエリの更新を行い、コンポーネントが新しいデータで再レンダリングすることを期待しますが、そうはしません。なぜ誰がそれが分かっていますか?ありがとう!変異後のApolloの更新が再レンダリングを引き起こさない

@graphql(fetchLectureResponseMutation, { 
    options: ownProps => ({ 
    variables: { lectureName: ownProps.match.params.lectureName }, 
    update: (proxy, { data: { fetchLectureResponse } }) => { 
     const data = proxy.readQuery({ 
     query: lectureResponseQuery, 
     variables: { lectureName: ownProps.match.params.lectureName }, 
     }); 
     data.lectureResponse = fetchLectureResponse; 
     proxy.writeQuery({ 
     query: lectureResponseQuery, 
     data, 
     }); 
    }, 
    }), 
    name: 'fetchLectureResponse', 
}) 
@graphql(lectureResponseQuery, { 
    options: ownProps => ({ 
    variables: { lectureName: ownProps.match.params.lectureName }, 
    }), 
}) 
class LecturePage extends React.PureComponent { 
    componentWillUpdate(nextProps) { 
    if (nextProps.data.lectureResponse === null) { 
     this.props.fetchLectureResponse(); 
    } 
    } 


    render() { 
    const { data } = this.props; 
    if (data.loading || data.lectureResponse === null) { 
     return <Loading />; 
    } 

    return <LectureLayout lectureResponse={data.lectureResponse} /> 
    } 
} 

答えて

0

今後この問題を鑑識する人にとって、中心的な問題は、検索または作成操作を実行したかったことです。これは、クエリーと突然変異の間のタイミングを同期させる必要がないことを意味する1つのバックエンドコールしか作成しないため、クエリーが新しいオブジェクトを返すときにはうまく機能します。

TLDR:findOrCreate操作のクエリを使用してください。

関連する問題