title: Apollo loading is always false on props change
body: <p>I am new to Apollo. Issue i am facing is that On initial (Mount/Render) network call is made and on prop change it isn't.</p>
  
  <p>Following is simplified structure of my application.</p>
  
  <pre><code>&lt;Component (has filters in state)&gt;
    &lt;QueryComponent filters = {...filters} (passed to query)&gt;
  
      &lt;Table onChange/&gt;
  
    &lt;/QueryComponent&gt;
  &lt;Component/&gt;
  </code></pre>
  
  <pre><code>QueryComponent Code
  
  export const QueryComponent = ({ callback, filter }) =&gt; {
  
    // Data transformation from filter to vars(expected by Query)
  
    return (
      &lt;Query
        handleLoading
        query={query}
        returnPartialData
        variables={vars}
        fetchPolicy="network-only"
        callback={callback}
        getData={function}
        entityType="xx"
      /&gt;
    );
  };
  
  </code></pre>
  
  <pre><code>Query returns ApolloQuery
  
  &lt;ApolloQuery
      returnPartialData={returnPartialData}
      partialRefetch={partialRefetch}
      {...rest}
    &gt;
      {
        ({
          data,
          loading,
        }) =&gt; {
          if (loading) {
            return handleLoading
              ? (
                &lt;Loading /&gt;
              )
              : callback({
                loading,
              });
          }
  
          const queryData = data &amp;&amp; getData(data);
          const hasValidData = !!queryData &amp;&amp; !!Object
            .values(queryData)
            .filter((val) =&gt; !!val)
            .length;
  
          if (!hasValidData) {
            return passThruMissingData
              ? callback({
                loading,
                ...queryData,
              })
              : (
                &lt;EntityNotFound
                  type={entityType}
                /&gt;
              );
          }
  
          let strippedData = { ...queryData };
          const isValueAnArray = Object.values(strippedData)[0] instanceof Array;
  
          if (isValueAnArray) {
            strippedData = transform(
              strippedData,
              (result, value, key) =&gt; {
                value.forEach(deepStripInvalid);
  
                // eslint-disable-next-line no-param-reassign
                result[key] = value;
              },
            );
          } else {
            deepStripInvalid(strippedData);
          }
  
          return callback({
            ...strippedData,
          });
        }
      }
    &lt;/ApolloQuery&gt;
  </code></pre>
  
  <p>and <code>QueryComponent</code> has a Wrapper that has <code>Query as ApolloQuery</code> form <code>react-apollo</code> and it returns loader when <strong>loading</strong> is true.</p>
  
  <p>In <code>&lt;Table/&gt;</code> component I have handler that updates the filters in Component which flows down into <code>&lt;QueryComponent /&gt;</code></p>
  
  <p>On initial render Filters are passed down and i can see that network call has been made and loading state was true for a second and then change to false. When I interact with table onChange is called which updates the filters and they are passed to Query, but loading state return false and there is no network call.</p>
  
  <p>I have tried to set <code>fetchPolicy="network-only"</code> and to <code>fetchPolicy="no-cache"</code> as well and there is still no network call.</p>
  
  <p>Note: Currently there is no data on backend so initial query returns an empty array.</p>
  
  <p>Behaviour I am expecting: When filters are changed query is called again and there should be a network call.</p>
  
  <p>Note2: If I forcefully unmount and remount the <code>&lt;QueryComponent&gt;</code> then network request is made, but i would prefer to use Apollo's loading state to handle that.</p>
  
  <p><strong>react-apollo</strong>: "version": "2.5.8"</p>
  
  <p><strong>apollo</strong>: "version": "2.21.0"</p>
  
  <p>Edited to include more details.</p>