reactjs - 使用 TypeScript 将状态设置器传递给子级
问题描述
我有以下代码; 代码沙盒
应用程序.tsx:
interface IAppDisplayMap {
[key: string]: (props : IAppComponentProps) => JSX.Element
}
interface IAppComponentProps {
setAppDisplay: React.Dispatch<React.SetStateAction<string>>
}
const appDisplayMap : IAppDisplayMap = {
"MainMenu": MainMenu
}
export default function App() {
const [appDisplay, setAppDisplay] = useState("MainMenu");
const AppComponent = useMemo(() => appDisplayMap[appDisplay], [appDisplay]);
return (
<Wrapper>
{AppComponent ? <AppComponent setAppDisplay={setAppDisplay} /> : "Invalid AppComponent"}
</Wrapper>
)
}
MainMenu.tsx:
export default function MainMenu({setAppDisplay}) {
return (
<Wrapper>
MainMenu
</Wrapper>
)
}
我的问题是 TS 抱怨 setAppDisplay 被键入为“任何”。使用以下代码:
export default function MainMenu({setAppDisplay} : IAppComponentProps) {
return (
<Wrapper>
MainMenu
</Wrapper>
)
}
错误消失了,但 setAppDisplay 不应该从父级推断它的类型吗?
解决方案
推荐阅读
- node.js - 在 postinstall 中调用时 sed 无法更改文件
- scala - 寻找对控制台友好的等价于将文本包装在列中的 show()
- powershell - Formatting Histogram from csv content with defined bucket max and min (powershell)
- html - 仅为 ng-repeat 的特定实例禁用按钮
- python - 使用 pathlib 重命名文件扩展名(python 3)
- sql - DB2 - 如何查找多次出现的列值
- javascript - Never talking about populate a normal view
- c++ - CreateMutex() seems to acquire mutex even when ERROR_ALREADY_EXISTS
- javascript - javascript changed my link address in string
- python - How to fix : pyconfig.h not found with Anaconda