将 react-redux useSelector 与打字稿一起使用
Posted
技术标签:
【中文标题】将 react-redux useSelector 与打字稿一起使用【英文标题】:Use react-redux useSelector with typescript 【发布时间】:2019-10-06 23:22:00 【问题描述】:当尝试使用 react-redux typescript 的新的 useSelector 钩子(见下面的例子)时,会出现函数不存在的错误:
Module '"../../../node_modules/@types/react-redux"' has no exported member 'useSelector'. TS2305
示例:
import * as React from "react"
import useSelector from "react-redux"
import Message from "./Message"
export const MessageContainer = () =>
const searchValue = useSelector((state) => state.search)
return (
<Message searchValue=searchValue />
)
使用过的版本: "react-redux": "^7.1.0-alpha.5" "@types/react-redux": "^7.0.9"
【问题讨论】:
Typescript 尚未更新。您正在使用具有 7.0.9 版本的@types/react-redux
。这些钩子是在 7.1.0 中添加的。
目前是最新版本的类型,有没有什么办法可以导入函数避免报错?
显然可以通过自己添加模块定义来临时修复:github.com/DefinitelyTyped/DefinitelyTyped/pull/…
【参考方案1】:
以下代码取自关于 typescript 的 redux 文档本身typescript redux offical
interface RootState
isOn: boolean
// TS infers type: (state: RootState) => boolean
const selectIsOn = (state: RootState) => state.isOn
// TS infers `isOn` is boolean
const isOn = useSelector(selectIsOn)
正如它在稍后添加挂钩之前所说的那样,但是如果您使用挂钩,最好这样编写 Selector
【讨论】:
以上是关于将 react-redux useSelector 与打字稿一起使用的主要内容,如果未能解决你的问题,请参考以下文章
useSelector 无法从“react-redux”导出
react-redux & 使用useSelector useDispatch 替代connect
如何正确使用带有 react-redux 的 useSelector 钩子的 curried 选择器函数?