Например, у тебя такой селектор
const selector = (state) => {
return {
a: state.a,
b: state.b,
};
};
как видим, он всегда возвращает новое значение, потому что новый объект (новая ссылка).
если селектор несколько раз подряд будет возвращать, например,
{a: 1, b: 2}, то компонент, в котором вызван useSelector, будет всегда перерендериваться, так как useSelector по умолчанию сравнивает старое и новое значение по ссылке и потому считает их разными.
вторым параметром ты можешь воткнуть функцию, которая умеет сравнить объекты более "вдумчиво" и признать их одинаковыми, даже если ссылки разные:
const isEqual = (x, y) => {
return x === y || (x.a === y.a && x.b === y.b);
};
за счет этого сможем экономить ререндеры.
можно взять готовую shallowEqual из 'react-redux', если только поверхностное сравнение, или использовать глубокое сравнение, или что-то ещё.