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

When it is React Hooks with Redux, must it be using selectors?

以前用 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 的角度来看,它们之间没有太大区别。

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