作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下代码在 TypeScript 中使用 Redux 定义类型化选择器:
import { useSelector, TypedUseSelectorHook } from 'react-redux';
export interface RootState {
user: {
account: string;
}
};
export const useTypedSelector: TypedUseSelectorHook<RootState> = useSelector;
现在我看到
TypedUseSelectorHook
已弃用,应替换为
createSelectorHook<State, Action>()
.
Action
也必须在那里。有什么建议吗?
最佳答案
useSelector
hook 有两个通用变量:整个状态的类型( TState
)和您选择的值的类型( TSelected
)。我们想在 TState
处做一个绑定(bind)钩子(Hook)。是已知的,但 TSelected
取决于我们调用钩子(Hook)的选择器参数。TypedUseSelectorHook
基本上只是一个 typescript 覆盖。您的 useTypedSelector
的值(value)只是 useSelector
.createSelectorHook
有点不同,因为它是一个返回 useSelector
的工厂函数。钩。它将上下文作为可选参数 (docs link)它有第二个通用变量 Action
因为 context
取决于 Action 类型。您的选择器 Hook 不依赖于操作类型,因此您无需担心。幸运的是 Action
变量是可选的,默认为 AnyAction
.您只需要为状态设置泛型:
export const useTypedSelector = createSelectorHook<RootState>();
useTypedSelector
的类型是我们所期望的,这是一个只有一个通用描述所选值的钩子(Hook):
const useTypedSelector: <Selected extends unknown>(
selector: (state: RootState) => Selected,
equalityFn?: ((previous: Selected, next: Selected) => boolean) | undefined
) => Selected
Playground Link
关于typescript - 使用 createSelectorHook 而不是弃用的 TypedUseSelectorHook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64895977/
我是一名优秀的程序员,十分优秀!