javascript - 使用react.js将html <img> 组件作为参数属性传递到 <li> 标签中

标签 javascript html reactjs

我将一个字符串转换为一系列图像标签,如下所示:

for (var i = 0; i < cardCollection.length; i++) {
  cardCollection[i].manaCost = cardCollection[i].manaCost.replace(/\{([0-z]+)\}/g, "<img src='\\data\\img\\$1.png' height='20px'/>");
}

这会将类似 {1}{G} 的内容转换为

<img src='./data/img/1.png' height='20px'/><img src='./data/img/G.png' height='20px'/>

我认为路径设置正确,因为它所在的 js 文件与“data”文件夹位于同一文件夹中(并且我尝试过在/data 之前使用或不使用 . )。然后我想将此 html 插入到现有的 < li> 组件中:

< ul onClick = {this.handleListClick} > 
{ cardCollection.map(function(card) {
    if (card.manaCost != undefined) {
        return <li>{card.name} {card.manaCost} </li>; 
    }
    else {
        return <li>{card.name}</li > ;
    }
  })
} < /ul>

这个“有效”是因为它向我显示了原始 html 和图像标签,但不是我想要获取的实际图像。从 card.manaCost 周围删除 {} 只会得到“card.manaCost”。假设我的路径是正确的,我需要做什么才能让它将其解析为实际的 HTML?

最佳答案

如果您希望解析 HTML 字符串,可以使用 dangerouslySetInnerHTML属性:

<ul onClick = {this.handleListClick}> 
{ cardCollection.map(function(card) {
    if (card.manaCost != undefined) {
        var html = card.name + ' ' + card.manaCost;
        return <li dangerouslySetInnerHTML={{__html: html}} />;
    }
    else {
        return <li>{card.name}</li>;
    }
  })
} </ul>

但是,请注意这看起来有多糟糕。这是故意的,因为 React 团队不希望你使用它:

Improper use of the innerHTML can open you up to a cross-site scripting (XSS) attack. Sanitizing user input for display is notoriously error-prone, and failure to properly sanitize is one of the leading causes of web vulnerabilities on the internet.

我建议不要改变数组(即删除 for 循环)并直接创建图像作为 React 元素:

<ul onClick = {this.handleListClick}> 
{ cardCollection.map(function(card, i) {
    var manaCost;
    if (card.manaCost) {
      manaCost = card.manaCost
        .match(/\{[0-z]+\}/g)
        .map(function (basename, i) {
          var src = './data/img/' + basename.substring(1, basename.length - 1) + '.png';
          return <img key={i} src={src} height='20px' />;
        });
    }
    return <li key={i}>{card.name} {manaCost}</li>;
  })
} </ul>

关于javascript - 使用react.js将html <img> 组件作为参数属性传递到 <li> 标签中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34867769/

相关文章:

javascript - 使用扩展运算符更新对象的多个属性

javascript - jsx中如何写if语句来判断是否显示某个属性

javascript - 无法启动SweetAlert2,抛出错误?

javascript - JIT Graph 上的替代缩放选项

php - 为每个查询使用不同的按钮更改 SQL 查询?

ios - iPad 无法使用 HTML5 渲染 H.264 视频

javascript - *ngIf 不像其他 *ngIf 那样工作

javascript - react : show object as working JS format?

javascript - 如果跨度文本不为 0,则发出警报

javascript - Google Map API v2 - GeoCoder - 如何自定义标记?