React - 通过图像数组进行映射

新手上路,请多包涵

我已经创建了其中包含数组、文本和图像的对象,我希望通过它进行映射以呈现新组件,是否可以像这样通过图像进行映射?因为当我通过 props 传递新组件时,我的新组件没有检测到任何图片,并且不知道我是否做错了什么,或者那样做是不可能的。

 import firstProjectPhoto from '../img/picOne.png';
import secondProjectPhoto from '../img/picTwo.png';
import thirdProjectPhoto from '../img/picThree.png';
import ListOfProjects from "./subcomponents/ListOfProjects";

const projects = [{
    photo:[{firstProjectPhoto},{secondProjectPhoto},{thirdProjectPhoto}],
    },
    {
    text:["Project number one", "Project number two", "Project number 3"],
    }];

class Projects extends Component {
    render() {
        return (
            <Grid className="text-center" id="listOfProjects">
                <PageHeader className="projects-header">My Projects</PageHeader>
                {projects.map(e =>
                    <ListOfProjects
                    photo={e.photo}
                    text={e.text}
                    />
                )}
            </Grid>
        );
    }
}

export default Projects;

新组件

class ListOfProjects extends Component {
    render() {
        return (
            <Row className="show-grid text-center projects-list">
                <Col xs={1} sm={1} className="projects">
                    <Image src={this.props.photo} thumbnail responsive/>
                    <p>{this.props.text}</p>
                </Col>
            </Row>
        );
    }
}

export default ListOfProjects;

更新:

实际上有一些进展,谢谢你们:)问题出在 const 项目的结构中,但是它仍然将 img src 显示为 [object Object] 而不是正常图片

const projects = [{
        photo: {firstProjectPhoto},
        text:"first project"
    },
    {
        photo: {secondProjectPhoto},
        text:"second project"
    },
    {
        photo: {thirdProjectPhoto},
        text:"third project"
    }
]

           <Grid className="text-center" id="listOfProjects">
                <PageHeader className="projects-header">
My Projects    </PageHeader>
                {projects.map((e,i) =>
                    <ListOfProjects
                    photo={e.photo}
                    text={e.text}
                    key={i}
                    />
                )}
            </Grid>

更新

我应该没有 {} 现在工作得很好:) 谢谢大家的帮助

原文由 Zirek 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 217
2 个回答

projects 对象的结构不是您所期望的。你要

projects = [
  {
    photo: projectPhoto,
    text: projectText
  },
  ...
]

但是你有

projects = [
  { photo: [...] },
  { text: [...] }
]

您还忘记了将 key 添加到循环中呈现的每个项目:

 {projects.map((e, idx) =>
  <ListOfProjects
    photo={e.photo}
    text={e.text}
    key={idx} // <-- here
    />
)}

原文由 Baboo 发布,翻译遵循 CC BY-SA 4.0 许可协议

假设你想传递一个虚拟数据库代码,应该按如下方式进行,即使它并不理想但用于测试目的:

 class Projects extends Component {

const projects = [
    {
        photo:firstProjectPhoto,
        text: "Project number one"
    },
    {
        photo:secondProjectPhoto,
        text: "Project number two"
    },
    {
        photo:thirdProjectPhoto,
        text: "Project number three"
    },
];

render() {
    return (
        <Grid className="text-center" id="listOfProjects">
            <PageHeader className="projects-header">My Projects</PageHeader>
            {projects.map(e =>
                <ListOfProjects
                projects={projects}
                />
            )}
        </Grid>
    );
}
}

原文由 vitomadio 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题