JS:如何动态抓取变量名

JS: How to dynamically grab variable names

我正在使用 create-react-app 模板。

在我的一个组件中,我正在导入多个图像的路径。

import iconAvatar from '../img/icon-avatar.png';
import iconHome from '../img/icon-home.png';
import iconVendor from '../img/icon-vendor.png';

现在假设我有一个这样的变量,它决定要使用的图像。

let imageType = "avatar"; // or "home", or "vendor", etc.

我想根据 imageType 的值动态渲染出正确的图像(无需使用复杂的 if-else 结构)

类似下面的东西(除了它不起作用)

<img src={"icon"}{imageType}/>

我该怎么做?

您有几个选项可用:

首先使用 @CertainPerformance 建议的对象

const images = {
  avatar: require('../img/icon-avatar.png'),
  home: require('../img/icon-home.png'),
  vendor: require('../img/icon-vendor.png')
}

<img src={images[imageType]} />

或者您可以使用 switch / if 语句

switch (imageType) {
  case 'home': return <img src={iconHome} />;
  case 'avatar': return <img src={iconAvatar} />;
  case 'vendor': return <img src={iconVendor} />;
}

如果您的所有文件名都遵循该标准,您可以只使用字符串连接。

<img src={'../img/icon-' + imageType + '.png'} />

甚至更干净 string interpolation..

<img src={`../img/icon-{$imageType}.png`} />

编辑: 使用 webpack 时必须使用 require 并且使用 require 时字符串连接不起作用,但是字符串插值仍然有效。所以..

<img src={require(`/img/icon-{$imageType}.png`)} />

有关详细信息,请参阅