reactjs - 如何为 React Action Hook Store 定义 Typescript 属性和类型
问题描述
在Tanner Linsley在这里描述的“动作挂钩模式”之后,我正在使用挂钩创建一个反应状态管理存储。
我正在学习 Typescript 并尝试使用它创建此项目,但在调用自定义挂钩以使用商店时不断遇到错误:
'() => { Provider: ({ initialValue, children }: { initialValue?: {}; children: any; }) => Element; useStore: () => any;}' ts(2339)
我用普通的反应测试了它并且它正在工作,所以这是 Typescript 的类型或属性定义问题。
创建通用商店(无打字稿错误):
interface IState {}
const initialState: IState = {}
export default function newStore() {
const context = React.createContext<IState>(initialState)
const Provider = ({ initialValue = {}, children }): JSX.Element => {
const [state, setState] = useState(initialValue)
const contextValue = useMemo(() => [state, setState], [state])
return <context.Provider value={contextValue}>{children}</context.Provider>
}
const useStore = () => useContext(context)
return { Provider, useStore }
}
存储操作挂钩(两个 useStore 实例都会显示错误):
import store from "./makeStore";
export const useGalleryOpen = () => {
const [{ galleryOpen }] = store.useStore()
return galleryOpen
}
export const useGalleryToggle = () => {
const [_, setState] = store.useStore()
return () =>
setState(prev => ({
...prev,
galleryOpen: !prev.galleryOpen,
}))
}
非常感谢任何建议。
解决方案
问题的关键点(它在您的代码沙箱中可见,我已经编辑了您的问题以包含它)是store
定义。
您将商店定义为import store from "./makeStore";
一个函数也是如此store
,当它被调用时,它会返回一个包含
{
Provider: any;
useStore(): any;
}
当你消费它时,store.useStore()
你就犯了错误。store
是一个函数,它的返回值是一个包含该useStore
函数的对象。
一切顺利更换
store.useStore()
和
store().useStore()
如果您需要更多帮助,请告诉我
推荐阅读
- c# - 实体框架自动安全导航
- excel - 使用搜索提取多列
- selenium - 通过时如何在 TFS 构建测试上附加文件?
- react-native - 操作导入的组件道具和功能?
- r - R:如何合并基于两列的重复行
- javascript - 我编辑了一个选定的项目,初始集合自动更改并在我单击时继续添加
- azure - 如何获取 Azure AD 计算机对象的所有详细信息?
- python - 用于 bitstamp API 的 Lua 与 Python。Python 代码有效,但 Lua 无效。为什么?
- angular - 为什么我的角度序列方法不起作用?
- java - 需要一些关于如何解码从 HERE-OLP 以二进制格式下载的 protobuf 文件的建议