Вызов функции render не означает перерисовку DOM. React разберётся, что нужно изменить.
Если хочется "супер производительности", тогда надо изменить структуру store на что-то такое:
const initialState = {
result: [], // list of ids
data: {}, // map by id
}
export const placesReducer = (state, { type, payload }) => {
switch (type) {
case 'PLACES_LOAD_SUCCESS':
return {
...state,
// псевдокод, можно использовать https://github.com/paularmstrong/normalizr
result: payload.map(id),
data: payload.reduce(keyById),
}
}
}
// по этому результату делаете .map
export const getPlaces = state => state.places.result
// этот селектор будет дергать каждый Place, только ему нынче кидайте не place={place}, а id={id}, ибо .map по идентификаторам идёт
export const getPlace = (state, id) => state.places.data[id];
Не забывайте, что таким способом Вы создаёте N+1 подписок, а раньше была 1 подписка.
React очень много раз вызывает функцию render (либо же саму функцию-компонент), поэтому в "лишних" ререндерах нет ничего страшного. Замечательный пост на эту тему:
https://kentcdodds.com/blog/fix-the-slow-render-be...