You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native+TypeScript父向子传值后调用map报错如何解决?

问题根因

你遇到的TypeScript报错是子组件取值逻辑错误导致的:

  • 你定义的OrgList是props的类型,它本身是一个包含data属性的对象,不是数组
  • 子组件中const data = props;的写法,是把整个props对象赋值给了data变量,这个对象本身没有map方法,只有它内部的data字段才是你从父组件传递过来的数组类型
解决方法

修改子组件的取值逻辑即可,有两种常用写法:

写法1:直接从props提取data属性

把const data = props;改成const data = props.data;即可。

写法2:入参解构props(更推荐)

直接在函数入参时解构出data属性,代码更简洁易读,修改后的完整子组件代码如下:

import Orgs from '../api/interfaces'

interface OrgListProps {
  data: Orgs[]
}

// 入参直接解构出data字段
export default function OrgList({ data }: OrgListProps) {
  return (
    <Center>
      <Box>
        <Flex flexDirection="column">
          {/* 此时data是数组,可正常调用map方法 */}
          {data.map((item) => ( 

          <Box
            padding={3}
            w={350}
            h='auto'
            borderRadius={14}
            backgroundColor="#ffffff"
            shadow={1}
          >
            <Flex flexDirection='row'>
              <Box>
                <Image alt = '' borderRadius={6} w={50} h={50} source={ReactIcon} />
              </Box>
              <Flex flexDirection='column'>
                <Box marginLeft={2}>
                  <Heading
                    fontSize={16}
                    color="#2196f3"
                    fontWeight={50}
                  >
                    {item.login}
                  </Heading>
                  <Heading
                    fontSize={16}
                    color="#636363"
                    fontWeight={400}
                    overflow='hidden'
                  >
                    React website and its localizations
                  </Heading>
                </Box>
              </Flex>
            </Flex>
            <Flex flexDirection='row' justifyContent='flex-end'>
              <Button
                marginTop={3}
                padding={2}
                size='sm'
                borderRadius={16}
                backgroundColor='#91CBF9'
                startIcon={
                  <Icon
                    as={<SalvoAzul />}
                    size='sm'
                  >
                  </Icon>
                }
              >
                <Text
                  textAlign='center'
                  color='#2196f3'
                >
                  Salvar
                </Text>
              </Button>
            </Flex>
          </Box>
          ))}
        </Flex>
      </Box>
    </Center>
  );
}
额外注意事项

父组件中调用的子组件名为<OrgsList />,但你当前子组件导出的名称是OrgList,两者名称不一致,修改完数据问题后需要同步组件名,否则会报组件不存在的错误。

内容的提问来源于stack exchange,提问作者Matheus Martins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 00:54:03