当它是 React Hooks with Redux 时,它必须使用选择器吗?

问题描述

在过去,当使用 React 和 Redux 时,有些人使用选择器,有些人不使用。

(我认为是 "reselect" npm package,但我不确定)。

但是,当 React 有 Hooks 时,我认为我们可以使用

useSelector()
usedispatch()

而不是所有的 mapStatetoPropsmapdispatchToPropsconnect(...)(Component)。但是,我们必须使用useSelector()吗?之前,我们可以选择使用选择器或不使用它。是不是有了 React Hooks 和 Redux 之后,我们就必须使用选择器?

解决方法

是的,您必须使用 useSelector。而且我认为您在那里有点困惑:如果您将 connectmapStateToProps 一起使用,您总是在那里使用选择器函数:mapStateToProps 是那个选择器函数,可能是由多个子选择器组成的,这些子选择器可能是内联编写的或从某处导入的。

不过,如果您想要状态中的任何值,您永远不会“选择不使用选择器”。我认为你的“什么是选择器”的概念有点过于严格了。

您可以通过两种方式使用它:

// in your slice file
export const someSelector = state => state.something;
// in your component file
import someSelector from './sliceFile';
// in your component
useSelector(someSelector)

或者只是内联:

useSelector(state => state.something)

这两个都是选择器,即使第二个看起来不太像。

一个只是被提取到一个函数中,另一个是一个内联函数。两者都完全可以使用,并且从 JS 的角度来看,它们之间没有太大区别。

正如您提到的重新选择:重新选择使“记忆选择器”,这是它的另一个概念。为此,您可以自由使用或不使用它,您就在那里。