【问题标题】:how you know which item is an image or button您如何知道哪个项目是图像或按钮
【发布时间】:2020-07-27 09:22:32
【问题描述】:

我在 ReactJs 中传递图像道具时遇到问题

这是我的代码:component/Table/index。该组件用于 2 个表(订单和产品),所以我创建喜欢这个

import React from 'react';
import {Table, Image} from 'react-bootstrap';
import '../Table/index.css';
import Button from '../Button/index';

const TableItem = ({datas, columns}) => {
  return(
    <Table striped bordered hover>
      <thead>
        <tr> 
          {columns.map(name => <th>{name}</th>)}
        </tr>
      </thead>
      <tbody>
        <tr> 
          {datas.map(data => 
          <td>{data}</td>
          )}
        </tr>
      </tbody>
    </Table>
  );
}

export default TableItem;

我必须像这样从app.js 导入该列的数据

 <TableItem columns={["No.", "Image", "Name", "Category", "Price", "Action"]} 
 datas={["1", "https://place-hold.it/100x150", "MIlk tea", "Milk tea", "100000", "button"]}
 />

正如您在上面看到的,我已经导入了所有列的数据,但是有一个问题,在 Image 列中,我没有 &lt;Image&gt; 标记,因此无法为我显示图像链接的数据, 还有一栏是Action,在这一栏会有两个按钮每个产品每一行的编辑和删除 如果我有很多数据,如何在app.js 文件中检索它

我不知道如何解决这个问题,谁能帮帮我,这对我来说太难了,因为我对 ReactJs 很陌生

【问题讨论】:

    标签: reactjs react-component


    【解决方案1】:

    问题是如何知道哪个项目是图像或按钮。

    如果您知道它总是称为“图像”,您可以在列中搜索它,获取索引并在循环中使用它:

    const TableItem = ({datas, columns}) => {
    
      const imageColumnIndex = columns.indexOf('Image');
      const actionColumnIndex = columns.indexOf('Action');
    
      return(
        <Table striped bordered hover>
          <thead>
            <tr> 
              {columns.map(name => <th>{name}</th>)}
            </tr>
          </thead>
          <tbody>
            <tr> 
              {datas.map((data, index) => 
              <td>
                {index === actionColumnIndex ? (
                  <React.Fragment>
                    {data.includes('edit') && <button type="button">Edit</button>}
                    {data.includes('delete') && <button type="button">Delete</button>}
                  </React.Fragment>
                ) : (
                  index === imageColumnIndex ? <img src={data}/> : data
                )}
              </td>
              )}
            </tr>
          </tbody>
        </Table>
      );
    }
    

    然后在您的app.js 中,使用editdelete 作为按钮示例:

    const columns = ["No.", "Image", "Name", "Category", "Price", "Action"];
    const datas = ["1", "https://place-hold.it/100x150", "MIlk tea", "Milk tea", "100000", "edit,delete"];
    
    return <TableItem columns={columns} datas={datas}/>
    

    注意:如果您还没有看到&lt;condition? ? &lt;true&gt; : &lt;false&gt;,请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator

    【讨论】:

    • @Erme Koc 但是它同时显示了文本和图像,我怎样才能只显示图像而不是文本。你能帮我解决这个问题吗,我对这个案子很困惑
    • 你能把你看到的截图截图吗?或者您可以在codesandbox.io 重新创建它,以便我们查看
    • 对不起,这是我的错,我想这样问,如果我在“操作”列上有两个按钮,我该如何添加它,示例数据:place-hold.it/100x150", "奶茶", "奶茶", "100000" , ]} />。我的按钮是一个组件,我从另一个文件夹 src/components/Button/index 导入
    • 更新了答案以包含按钮。您可以像这样添加多个按钮,在app.js 中定义并单独配置它们。不确定这是否是最好的方法,但它应该可以工作:)
    猜你喜欢
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 2011-07-12
    • 1970-01-01
    • 2011-04-11
    • 2021-10-08
    相关资源
    最近更新 更多