Проблема переопределения должнаComponentUpdate из PureComponent - PullRequest
0 голосов
/ 05 ноября 2018

Например, я хочу написать что-то вроде этого:

class MyComponent extends PureComponent {
  shouldComponentUpdate(nextProps, nextState, nextContext) {
    console.log('shouldComponentUpdate');
    return super.shouldComponentUpdate(nextProps, nextState, nextContext);
  }
}

Но super.shouldComponentUpdate не определено.

  1. Почему super.shouldComponentUpdate не определен?
  2. Как вызвать реализацию PureComponent по умолчанию?

Реакция 16.0.0

Ответы [ 3 ]

0 голосов
/ 05 ноября 2018

1) PureComponent на самом деле не реализует shouldComponentUpdate, поэтому документы React лежат .

2) Близко к реализации по умолчанию:

import shallowEqual from 'fbjs/lib/shallowEqual'; // no need to install

class MyComponent extends Component {
  shouldComponentUpdate(nextProps, nextState) {
    console.log('shouldComponentUpdate');
    return !shallowEqual(this.props, nextProps) || !shallowEqual(this.state, nextState);
  }
}
0 голосов
/ 05 ноября 2018

Чтобы еще больше расширить ответ Виктора. Разница между PureComponent и Component в реагировании заключается в чистом компоненте, который обрабатывает shouldComponentUpdate путем поверхностного сравнения реквизита и состояния.

Если вы хотите предоставить пользовательский mustComponentUpdate для обработки, когда и когда не должен обновляться компонент, я бы порекомендовал просто использовать обычный компонент. Я также хотел бы отметить, что и PureComponent, и Component оба требуют конструктора, который выполняет вызов super () в качестве первой строки.

0 голосов
/ 05 ноября 2018

В большинстве случаев PureComponent эквивалентен реализации shouldComponentUpdate () с поверхностным сравнением текущих и предыдущих параметров и состояния. Но если вы хотите написать shouldComponentUpdate () вручную, вы можете наследовать от React.Component.

...