ReactJS Перевыбрать контейнер рендеринга - PullRequest
0 голосов
/ 01 июня 2018

Я новичок в переосмотре реагирования, проблема в том, что когда я Perf.printWasted, он всегда показывает «Content Single> Connect (Индекс одиночных записей)» только с 1 экземпляром, тогда как xx раз

вот мойтекущий код

import React, { Component } from 'react';
import { connect } from 'react-redux';
import { createSelector } from 'reselect';
import { shape } from 'prop-types';

import Entry from '/components/entries/Entry';

class Entries extends Component {
  static displayName = 'Single Entries Index';

  static propTypes = { entries: shape() };

  shouldComponentUpdate(nextProps) {
    if (this.props.entries.size !== nextProps.entries.size) {
      return true;
    }
    return false;
  }

  render() {
    const { entries } = this.props;
    return (
      <ul className="entries">
        {entries.map(entry => (
          <Entry
            key={entry.get('id')}
            id={entry.get('id')}
          />
        ))}
      </ul>
    );
  }
};

const makeGetEntries = createSelector(
  state => state.data,
  data => data.get('entries')
);

const mapStateToProps = (state) => {
  return {
    entries: makeGetEntries(state)
  };
};

export default connect(mapStateToProps)(Entries);

Рабочий раствор с использованием createSelectorCreator, предложенный @ Logar

const createDeepEqualSelector = createSelectorCreator(
  defaultMemoize,
  isEqual
);

const makeGetEntries = createDeepEqualSelector(
  state => state.data,
  data => data.get('entries')
);

const mapStateToProps = (state) => {
  return { entries: makeGetEntries(state) };
};

export default connect(mapStateToProps)(Entries);
...