状态上不存在属性 - 使用带有 TypeScript 的 React Router Hooks
Posted
技术标签:
【中文标题】状态上不存在属性 - 使用带有 TypeScript 的 React Router Hooks【英文标题】:Property does not exist on state - Using React Router Hooks with TypeScript 【发布时间】:2020-09-10 10:27:24 【问题描述】:我在使用 react-router-dom hooks + TypeScript 时遇到了一些问题。
试图访问一些状态属性会给出一个错误,说它不存在
参考:
为了继续开发,我必须采取的一种变通方法是将其转换为 any
const location = useLocation() as any;
如何将有效接口传递给 useLocation 泛型以便在没有警告的情况下访问状态属性?
useDidMount(() =>
if (location.state?.newTransactions)
scroll.scrollToBottom();
);
【问题讨论】:
【参考方案1】:useLocation
接受一个确定state
属性类型的通用参数,因此:
const location = useLocation<YourStateTypeHere>();
例如:
interface LocationState
newTransactions?: boolean;
// ...
const location = useLocation<LocationState>();
// ...
useDidMount(() =>
if (location.state?.newTransactions)
scroll.scrollToBottom();
);
我是如何到达那里的(因为我以前没有使用过),以防它有用:我知道大多数钩子的 TypeScript 绑定至少实现一个通用参数,所以当我看到 React Router 的 location
合并时程序员定义的状态,我想它可能接受了一个。因此,我打开了一个使用 React Router 和 TypeScript 的项目,并将鼠标悬停在代码中的 useLocation
上。果然,弹出窗口显示了一个通用参数,该参数应用于state
属性。结果!
【讨论】:
以上是关于状态上不存在属性 - 使用带有 TypeScript 的 React Router Hooks的主要内容,如果未能解决你的问题,请参考以下文章
使用 React Typescript 的状态:类型'IntrinsicAttributes & IntrinsicClassAttributes 上不存在属性
带有 Typescript 的 Luxon:TS2339:“DateTime”类型上不存在属性“c”
如何修复 VSCode 中的“‘CombinedVueInstance’类型上不存在属性 XX”错误? (带有打字稿的Vue)
带有 Vetur 的 VSCode 中带有 Typescript 的 NativeScript-Vue:在类型“void”上不存在属性“then”的警报