Ну, во-первых, достаточно интересно, хотя React.memo является HOC, он не создает ту же вложенность, что и connect. Я создал тестовый код:
import React from "react";
import ReactDOM from "react-dom";
import {connect, Provider} from 'react-redux'
import { createStore } from 'redux'
import "./styles.css";
const MemoComponent = React.memo(function MyMemo() {
return <div>Memo</div>;
});
const ConnectedComponent = connect(null,null)(function MyConnected() {
return <div>ReduxConnectComponent</div>;
})
const store = createStore(()=>{},{})
function App() {
return (
<Provider store={store}>
<MemoComponent />
<ConnectedComponent/>
</Provider>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
А вот как выглядит структура:
Мы видим, что контент для подключения отображается глубже.
Во-вторых, в документах говорится:
по умолчанию useSelector () будет выполнять сравнение равенства ссылок выбранного значения при запуске функции селектора после отправки действия и будет вызывать повторный рендеринг компонента только в случае изменения выбранного значения. Однако, в отличие от connect (), useSelector () не предотвращает повторную визуализацию компонента из-за его родительской повторной визуализации, даже если реквизиты компонента не изменились.
это означает, что компонент, использующийSelector, не будет перерисован при изменении несвязанных частей магазина. И это самая важная часть оптимизации. Оптимизация с помощью React.memo или нет сейчас полностью зависит от вашего решения, и в большинстве случаев это просто не нужно. Мы используем React.memo только в тех случаях, когда компонент очень дорог в отображении.
Подводя итог, необходимо подключить упаковщик для подключения к магазину. С useSelector нам больше не нужно оборачиваться. Нам все еще нужно обернуть React.memo в тех редких случаях, когда нам нужно оптимизировать некоторые тяжелые компоненты. Работа React.memo также была выполнена с помощью connect, но в большинстве случаев это была преждевременная оптимизация.