reactjs - 使用 Typescript 显示从 Usestate 钩子(Hook)接收到的数组

标签 reactjs typescript react-hooks

我正在尝试使用从 usestate 钩子(Hook)接收到的 map 显示一组信息。编写 map 函数时,我收到“无法调用类型缺少调用签名的表达式”。错误。如果我创建一个返回相同信息的函数并调用该函数,我不会收到错误消息。

    export default function Portfolio() {
      const [portfolioData, setPortfoloioData] = useState<IProject[] | []>([])

      useEffect(() => {
        const portfolio: IProject[] = getPortfolio()
        setPortfoloioData(portfolio)
      }, [])

//Function to display the map that works.
      const displayBlocks = (portfolioData: IProject[]): JSX.Element[] => {
        return portfolioData.map((item, index) =>
          <ProjectBlock key={index} project={item} index={index} />
        )
      }

      return (
        <div className='text-center pt-3'>
          <h1 className='pb-4'>Portfolio</h1>

//This works without error
          {displayBlocks(portfolioData)} 

//This shows the missing call signature error even though
//it is the same as what is returned by the displayBlocks function.
          {portfolioData.map((item, index) =>
            <ProjectBlock key={index} project={item} index={index} />
          )}
        </div>
      )
    }

我想弄清楚如何在返回部分中使用简单的 map 显示信息,而无需调用另一个函数。我究竟做错了什么?

最佳答案

你的错误是这一行

const [portfolioData, setPortfoloioData] = useState<IProject[] | []>([]);
portfolioData成为 IProject[] | [] 的联合类型.在这种情况下,它是无用的并导致错误。 IProject[] 类型的任何变量可以容纳空数组。所以不需要创建 IProject 类型数组的联合。和 any 类型的数组(没有类型的方括号被认为是 any 类型)。

纠正错误只是做
const [portfolioData, setPortfoloioData] = useState<IProject[]>([]);

如果您想深入了解为什么会发生这种情况,我建议您阅读 this (它最好地描述了这个问题)和this .

关于reactjs - 使用 Typescript 显示从 Usestate 钩子(Hook)接收到的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56918950/

相关文章:

css - React - 使用样式渲染 <Link>

javascript - 如何将 AMAZON_COGNITO_USER_POOLS 与 apollo-client 一起使用

arrays - Angular 6 *ngFor 显示第一个、奇数、偶数和最后一个的不同样式

javascript - React - 从辅助方法获取请求返回对象

reactjs - 如何获取React组件的innerHTML

typescript 构建错误 - 这有什么问题?

typescript - 是否建议发布 TypeScript 节点模块的源文件?

javascript - 通过 React Context Provider 中的 keyof 推断的 TypeScript 类型

javascript - 如何在 React.js 中使用 React-router-dom 防止 App() 级别状态重置?

javascript - 如何在 React 函数之间共享状态并根据更改重新渲染