title: When is pristine actually calculated? It seems to always be true, even when the form changes
body: <p>On redux-form 6.4.2 I have the following form code:</p>
  
  <pre><code>const renderUsers = ({ fields }) =&gt; {
    const table = (
      &lt;table className={styleTable.tbody}&gt;
        &lt;thead className={styleTable.thead}&gt;
          &lt;tr&gt;
            &lt;th&gt;Username&lt;/th&gt;
            &lt;th&gt;Roles ('acct purch rec')&lt;/th&gt;
          &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody className={styleTable.tbody}&gt;
          {fields.map((userFieldName /* , index */) =&gt; (
            &lt;tr key={userFieldName}&gt;
              &lt;td&gt;
                &lt;Field name={`${userFieldName}.username`} component="input" disabled /&gt;
              &lt;/td&gt;
              &lt;td&gt;
                &lt;Field name={`${userFieldName}.roles`} component="input" /&gt;
              &lt;/td&gt;
            &lt;/tr&gt;
          ))}
        &lt;/tbody&gt;
      &lt;/table&gt;
    );
  
    return table;
  };
  
  class Form extends Component {
    // Ignore state changes with each user update.
    shouldComponentUpdate(nextProps) {
      return JSON.stringify(this.props.initialValues) !==
             JSON.stringify(nextProps.initialValues);
    }
  
    render() {
      const { loadUsers, handleSubmit, pristine, reset, submitting, invalid } = this.props;
  console.log(pristine, invalid, submitting);
      return (
        &lt;form onSubmit={handleSubmit}&gt;
  
          &lt;Field name="filter"
            component={TextField}
            props={{ floatingLabelText: 'Starting username', autoFocus: true }}
          /&gt;
          &lt;RaisedButton label="Filter"
            disabled={submitting}
            className={style.button}
            onClick={() =&gt; loadUsers()}
            secondary
          /&gt;
          &lt;br /&gt;
          &lt;br /&gt;
  
          &lt;FieldArray name="users" component={renderUsers} /&gt;
          &lt;br /&gt;
  
          &lt;div&gt;
            &lt;RaisedButton label={submitting ? 'Changing...' : 'Change'}
              disabled={pristine || invalid || submitting}
              className={style.button}
              type="submit"
              primary
            /&gt;
            &lt;RaisedButton label="Clear Values"
              disabled={pristine || submitting}
              className={style.button}
              onTouchTap={reset}
              secondary
            /&gt;
          &lt;/div&gt;
  
        &lt;/form&gt;
      );
    }
  }
  
  Form.propTypes = {
    initialValues: PropTypes.object.isRequired,
    loadUsers: PropTypes.func.isRequired,
    onSubmit: PropTypes.func.isRequired,
    handleSubmit: PropTypes.func.isRequired,
    pristine: PropTypes.bool.isRequired,
    invalid: PropTypes.bool.isRequired,
    reset: PropTypes.func.isRequired,
    submitting: PropTypes.bool.isRequired,
  };
  </code></pre>
  
  <p>I'm experiencing two problems:</p>
  
  <ol>
  <li>the console.log statement outputs <code>true false false</code> every time it outputs anything.  I would expect this only on the first output when the page first loads.</li>
  <li><p>the console.log statement only outputs something at these points:</p>
  
  <ol>
  <li>page load</li>
  <li>focus on a user role field</li>
  <li>type in the filter field</li>
  <li>press the filter button</li>
  </ol>
  
  <p>but it does not output anything at these points:</p>
  
  <ol>
  <li>type in a user role field</li>
  <li>blur a user role field</li>
  </ol></li>
  </ol>
  
  <p>I can see from the Redux DevTools that the state is getting updated properly.  For example, the first time I press a key in a user role field, the redux state diff looks like:</p>
  
  <p><a href="https://i.stack.imgur.com/8kLtd.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/8kLtd.png" alt="redux state diff -- Sorry for the picture, no formatting comes out when I copy the text."></a></p>
  
  <p>In particular, typing in a user role field (or at least on blur afterwards) would have to trigger a render, and then pristine would have to be false, in order for the form to work.  Since neither of these things is happening, the form's submit button stays disabled.</p>
  
  <p>I'm only asking these both in the same question in case there's one simple cause creating both of these sub-issues.  The main issue is that the submit button is always disabled, these sub-issues are just what I've been able to figure out.</p>