好吧,首先,虽然 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);
这是呈现的结构:

我们可以看到 connect 的内容被渲染得更深了。
其次,文档说:
默认情况下,使用useelector()将在派遣操作后运行选择器函数时对选定值进行参考平等比较,并且如果所选值更改,则只会导致组件重新渲染。但是,与 connect() 不同的是,useSelector() 不会由于其父级重新渲染而阻止组件重新渲染,即使组件的 props 没有更改。
这意味着当 store 的不相关部分发生变化时,不会重新渲染 useSelector 的组件。这是优化中最重要的部分。现在是否使用 React.memo 进行优化完全取决于您的决定,并且在大多数情况下,根本不需要它。我们仅在组件渲染成本非常高的情况下使用 React.memo。
总而言之,需要连接包装器才能连接到商店。有了 useSelector,我们就不必再包装了。在极少数情况下,当我们需要优化一些繁重的组件时,我们仍然需要使用 React.memo 进行包装。React.memo 的工作也是由 connect 完成的,但在大多数情况下,这是过早的优化。