如何在React中从数组渲染图像?

时间:2018-05-24 08:32:01

标签: mysql node.js reactjs express axios

我是React的新手。我刚学会用nodejs创建api并从MySQL表达。你可以在app.subarnanto.com/api/inventory查看json输出api。

如何渲染图像?这是我的代码。 我也收到了警告

  

警告:数组或迭代器中的每个子节点都应该有一个唯一的“key”prop

第三个,我如何改进我的代码?感谢

import React from 'react';
import axios from 'axios';

export default class Inventory extends React.Component {

  constructor(props) {
    super(props)
    this.state = {
      inventory: []
    }
  }

  componentDidMount() {
    axios.get('https://app.subarnanto.com/api/inventory').then(res => {
      this.setState({ inventory: res.data });
      console.log({ inventory: res.data });
    });
  }

  render() {
    return this.state.inventory.map(itemList => {
      let item = itemList;
      return (
        <div>
          <h4>Nama:  { item.name } </h4>
          <h4>Nomor Seri:  { item.serial } </h4>
          <h4>ID Tag:  { item.tag } </h4>
          <img src="{ item.image }"/>
        </div>
      );
    })
  }
}

4 个答案:

答案 0 :(得分:0)

您对src属性使用了不恰当的语法。你应该从src中删除引号: 此外,阵列中的每个子节点都应具有唯一的标识符键。在您的情况下,最好使用:<div key={ item.serial }>

工作示例:

render() {
    return this.state.inventory.map(item => {
        return (
            <div key={ item.serial }>
                <h4>Nama:  { item.name } </h4>
                <h4>Nomor Seri:  { item.serial } </h4>
                <h4>ID Tag: { item.tag } </h4>
                <img src={ item.image } />
            </div>
        );
   })
}

答案 1 :(得分:0)

将图像源从“{item.image}”更改为src = {item.image}作为字符串。

代码:

render() {
    return this.state.inventory.map((itemList, key) => {
      let item = itemList;
      return (
        <div key={key}>
          <h4>Nama:  { item.name } </h4>
          <h4>Nomor Seri:  { item.serial } </h4>
          <h4>ID Tag:  { item.tag } </h4>
          <img src={ item.image }/>
        </div>
      );
    })
  }

警告 - 数组中的每个子节点都应该有一个唯一的“键”支柱:

React使用key prop来理解组件到DOM元素的关系。

答案 2 :(得分:0)

要渲染图像,只需删除img标记中的双引号。

可以删除警告,向返回列表的每个元素添加key属性。这样React可以处理最小的DOM更改。 React documentation中有更多信息。

import React from 'react';
import axios from 'axios';

export default class Inventory extends React.Component {

    constructor(props) {
        super(props)
        this.state = {
            inventory: []
        }
    }

    componentDidMount() {
        axios.get('https://app.subarnanto.com/api/inventory').then(res => {
            this.setState({ inventory: res.data });
            console.log({ inventory: res.data });
        });
    }

    render() {
        return this.state.inventory.map(itemList => {
            let item = itemList;
            return (
                <div key={ item.id }>
                    <h4>Nama:  { item.name } </h4>
                    <h4>Nomor Seri:  { item.serial } </h4>
                    <h4>ID Tag:  { item.tag } </h4>
                    <img src={ item.image } />
                </div>
            );
        })
      }
}

答案 3 :(得分:0)

使用潜水标签的钥匙。 在反应文档中阅读更多相关信息here

  

选择密钥的最佳方法是使用在其兄弟姐妹中唯一标识列表项的字符串。大多数情况下,您会使用数据中的ID作为键:

反应文档不建议将索引作为更多关键字here

export default class Inventory extends React.Component {

  constructor(props) {
    super(props)
    this.state = {
      inventory: []
    }
  }

  componentDidMount() {
    axios.get('https://app.subarnanto.com/api/inventory').then(res => {
      this.setState({ inventory: res.data });
      console.log({ inventory: res.data });
    });
  }

  render() {
    return this.state.inventory.map(itemList => {
      let item = itemList;
      return (
        <div key={item.id}>
          <h4>Nama:  { item.name } </h4>
          <h4>Nomor Seri:  { item.serial } </h4>
          <h4>ID Tag:  { item.tag } </h4>
          <img src={item.image}/>
        </div>
      );
    })
  }
}