getDerivedStateFromProps
Ted's answer is quite readable to me.

You could use some to detect if you need to submit changes as that is semantically closer to what you are doing:

if (['activeBaseNode', 'filterOID', 'quickFilterRequest']
    .some(prop =&gt; state[prop] !== props[prop])


It's perhaps nicer to reverse the logic with every and early exit, then extract all the properties only when you need them. Here I'm doing it with a function, avoiding defining three consts:

static getDerivedStateFromProps(props, state) {
  if (['activeBaseNode', 'filterOID', 'quickFilterRequest']
    .every(prop =&gt; state[prop] === props[prop]) return null

  return (({activeBaseNode, filterOID, quickFilterRequest}) =&gt; 
         ( {activeBaseNode, filterOID, quickFilterRequest}))(props)


That's cryptic and short approach. 

I don't really like that the names of the properties are repeated three times in all the solutions. To avoid that, a reduce can be used to build the properties that need to be updated:

const toUpdate = ['activeBaseNode', 'filterOID', 'quickFilterRequest']
  .find(prop =&gt; state[prop] !== props[prop])
  .reduce((m,k) =&gt; m[k] = props[k], {})
return Object.keys(toUpdate).length == 0 ? null : toUpdate


Once you get used to it, I think that's the clearest. It's got the essence of the problem and nothing more: the names of the properties, that the state != the props, and that you return null if nothing is changing.