2017-09-07 16 views
4

クエリが終了した直後にリベンクスアクションをディスパッチしたい。 - これを行う正しい場所はどこですか?アポロ反応クエリー後のアクションのディスパッチ

ここでは、refetch関数への参照を保持しているので、最新のデータで後でビューを簡単に更新できます。

export default graphql(
    allFilesQuery, 
    { 
     props: ({ ownProps, data }) => { 
      const { dispatch } = ownProps; 
      dispatch(
       setRefetchAllFiles(data.refetch) 
      ); 
      return { 
       data, 
       ...ownProps, 
      }; 
     } 
    } 
)(FileListComponent); 

この作品ながら、私はまた言って、警告を受ける:

Warning: setState(...): Cannot update during an existing state transition (such as within `render` or another component's constructor). Render methods should be a pure function of props and state; constructor side-effects are an anti-pattern, but can be moved to `componentWillMount`. 

答えて

1

を小道具機能が純粋であると副作用の任意の種類を行うことなく、コンポーネントに注入する小道具を返すことになっています。実際にはsetTimeoutにディスパッチをラップすることでディスパッチできるかもしれませんが、これは非常に悪い考えです。コンポーネントが再描画されるたびに多くの不要なディスパッチが発生する可能性があるためです。ディスパッチによってコンポーネントが再レンダリングされる場合、無限ループにつながる可能性もあります。

あなたが望むことを行うための正しい場所は、コンポーネントにあります。 componentWillReceiveProps(またはその他のライフサイクル)を使用し、前の小道具と次の小道具を比較して、適切な場合に発送を開始することができます。これにはdata.networkStatusまたはdata.loadingを使用できます。

関連する問題