问题描述
在过去,当使用 React 和 Redux 时,有些人使用选择器,有些人不使用。
(我认为是 "reselect" npm package,但我不确定)。
但是,当 React 有 Hooks 时,我认为我们可以使用
useSelector()
usedispatch()
而不是所有的 mapStatetoProps
、mapdispatchToProps
、connect(...)(Component)
。但是,我们必须使用useSelector()
吗?之前,我们可以选择使用选择器或不使用它。是不是有了 React Hooks 和 Redux 之后,我们就必须使用选择器?
解决方法
是的,您必须使用 useSelector
。而且我认为您在那里有点困惑:如果您将 connect
与 mapStateToProps
一起使用,您总是在那里使用选择器函数: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 的角度来看,它们之间没有太大区别。
正如您提到的重新选择:重新选择使“记忆选择器”,这是它的另一个概念。为此,您可以自由使用或不使用它,您就在那里。