title: Material-UI Snackbar does not dismiss after controlled state set to false
body: <p>I have a Snackbar component that is controlled by checking the redux state. The <code>onRequestClose()</code> is an attempt to disable the clickaway close function. The problem I am having is that when the prop <code>snackbarWarningOpen</code> is set to <code>false</code> the first time, the snackbar does not dismiss.</p>
  
  <p>Here is my code and how I am calling the Snackbar component. The <code>snackbarWarningOpen</code> is a boolean variable that comes in as a prop, and that is accurately switching from true to false appropriately.</p>
  
  <pre><code>&lt;Snackbar
        open={snackbarWarningOpen}
        message={
          &lt;span&gt;
            &lt;i className="fa fa-exclamation-triangle ble-warning" aria-hidden="true" /&gt;
            &lt;span&gt; {snackbarWarningMessage}&lt;/span&gt;
          &lt;/span&gt;
        }
        style={styles.warningSnackbar}
        bodyStyle={styles.warningSnackbarBody}
        onRequestClose={(reason) =&gt; {
          if (reason === 'clickaway') {
            return;
          }
        }}
      /&gt;
  </code></pre>
  
  <p>I tracked down the problem to the <code>setTimeout()</code> function in <code>componentWillReceiveProps</code>, and it always sets the open state to <code>true</code> the last time it runs, even when the prop I am passing is <code>false</code>. The weird part is that the condition on the IF statement returns false, but the <code>setTimeout()</code> function still runs. After the prop is set to false, a clickaway event will dismiss the snackbar, but I am trying to get it to dismiss on its own. Is my implementation incorrect, or is this a bug in the snackbar component?</p>
  
  <p>This is code from the Material-UI source, and the <code>setState</code> within <code>timerOneAtTheTimeId</code> is where open switches back to true after I have passed the component an open prop as false.</p>
  
  <pre><code>componentWillReceiveProps(nextProps) {
  if (this.props.open &amp;&amp; nextProps.open &amp;&amp;
      (nextProps.message !== this.props.message || nextProps.action !== this.props.action)) {
    this.setState({
      open: false,
    });
  
    clearTimeout(this.timerOneAtTheTimeId);
    this.timerOneAtTheTimeId = setTimeout(() =&gt; {
      this.setState({
        message: nextProps.message,
        action: nextProps.action,
        open: true,
      });
    }, 400);
  } else {
    const open = nextProps.open;
  
    this.setState({
      open: open !== null ? open : this.state.open,
      message: nextProps.message,
      action: nextProps.action,
    });
  }
  </code></pre>