Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 传递html<;img>;将组件作为参数属性导入<;李>;带有react.js的标记_Javascript_Html_Reactjs - Fatal编程技术网

Javascript 传递html<;img>;将组件作为参数属性导入<;李>;带有react.js的标记

Javascript 传递html<;img>;将组件作为参数属性导入<;李>;带有react.js的标记,javascript,html,reactjs,Javascript,Html,Reactjs,我将字符串转换为一系列图像标记,如下所示: for(var i=0;i{title}; const PricedCard=({title,src})=>{title}; 渲染(){ const list=cards.map((card,i)=>card.src? : ); 返回{list}; } 我想进一步从我的结构中找出,但是在您的示例中,没有成本的卡没有根结构。我不完全确定字符串操作对您有什么好处,也不确定您为什么需要它 如果您正在传输JSX,没有理由停止在插值部分内部传输它 const

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

for(var i=0;i}
如果希望解析HTML字符串,可以使用以下属性:

<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>

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

<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>

我不完全确定字符串操作为您做了什么,也不确定您为什么需要它

如果您正在传输JSX,没有理由停止在插值部分内部传输它

const freeCard = (card, i) => <li key={i}>{ card.title }</li>;
const pricedCard = (card, i) => {
  const src = `./data/img/${card.src}.png`;
  return <li key={i}>{ card.title } <img src={ src } width="20px" /></li>;
};

render () {
  <ul >
    { cards.map((card, i) => card.src ? pricedCard(card) : freeCard(card) }
  </ul>
}
您真正的问题是React阻止您将字符串作为HTML注入。
如果你考虑为什么,它应该是有意义的;默认情况下,React不希望插入HTML,如果您决定创建论坛或添加博客评论,请打开以供用户输入

您可以使用元素的
危险的LySetinerHTML
属性,为它提供一个带有
\uuHTML
属性的对象

function pricedCard (card, i) {
  const htmlString = "" + card.title + " <img src=\"./data/img/" + card.src + "\" />";
  const content = {
    __html: htmlString
  };

  return <li key={i} dangerouslySetInnerHTML={ content } />;
}
功能价格卡(卡,i){
const htmlString=“”+card.title+”;
常量内容={
__html:htmlString
};
返回
  • ; }
  • 但正如你所看到的,这可能不像你希望实现的那样

    就我个人而言,我会这样做:

    const FreeCard = ({ title }) => <li >{ title }</li>;
    const PricedCard = ({ title, src }) => <li >{ title } <img src={ src } /></li>;
    
    render () {
      const list = cards.map((card, i) => card.src ?
        <PricedCard key={i} {...card} /> :
        <FreeCard key={i} {...card} />
      );
      return <ul>{ list }</ul>;
    }
    
    const FreeCard=({title})=>
  • {title}
  • ; const PricedCard=({title,src})=>
  • {title}
  • ; 渲染(){ const list=cards.map((card,i)=>card.src? : ); 返回
      {list}
    ; }

    我想进一步从我的结构中找出
  • ,但是在您的示例中,没有成本的卡没有根结构。

    我不完全确定字符串操作对您有什么好处,也不确定您为什么需要它

    如果您正在传输JSX,没有理由停止在插值部分内部传输它

    const freeCard = (card, i) => <li key={i}>{ card.title }</li>;
    const pricedCard = (card, i) => {
      const src = `./data/img/${card.src}.png`;
      return <li key={i}>{ card.title } <img src={ src } width="20px" /></li>;
    };
    
    render () {
      <ul >
        { cards.map((card, i) => card.src ? pricedCard(card) : freeCard(card) }
      </ul>
    }
    
    您真正的问题是React阻止您将字符串作为HTML注入。
    如果你考虑为什么,它应该是有意义的;默认情况下,React不希望插入HTML,如果您决定创建论坛或添加博客评论,请打开以供用户输入

    您可以使用元素的
    危险的LySetinerHTML
    属性,为它提供一个带有
    \uuHTML
    属性的对象

    function pricedCard (card, i) {
      const htmlString = "" + card.title + " <img src=\"./data/img/" + card.src + "\" />";
      const content = {
        __html: htmlString
      };
    
      return <li key={i} dangerouslySetInnerHTML={ content } />;
    }
    
    功能价格卡(卡,i){
    const htmlString=“”+card.title+”;
    常量内容={
    __html:htmlString
    };
    返回
  • ; }
  • 但正如你所看到的,这可能不像你希望实现的那样

    就我个人而言,我会这样做:

    const FreeCard = ({ title }) => <li >{ title }</li>;
    const PricedCard = ({ title, src }) => <li >{ title } <img src={ src } /></li>;
    
    render () {
      const list = cards.map((card, i) => card.src ?
        <PricedCard key={i} {...card} /> :
        <FreeCard key={i} {...card} />
      );
      return <ul>{ list }</ul>;
    }
    
    const FreeCard=({title})=>
  • {title}
  • ; const PricedCard=({title,src})=>
  • {title}
  • ; 渲染(){ const list=cards.map((card,i)=>card.src? : ); 返回
      {list}
    ; }

    我想进一步从我的结构中找出
  • ,但是在您的示例中,没有成本的卡没有根结构。

    这几乎可以完美地工作。但是,由于创建img标记的循环在每次我更新cardCollection时(每次搜索栏中出现新字母时)都会被调用,因此它试图对已更改为一个或多个img组件的内容进行匹配。什么是阻止它这样做的最安全的方法?@Ironwaffelman最安全的方法是停止变异该值,并将其保存到不同的属性或对象
    card.manaImage=parseCost(card.manaCost)。React将尝试解析
    manaCost
    ,它将能够这样做。@Ironwaffelman编辑。让我知道新的解决方案是否适用于您。这几乎可以完美地工作。但是,由于创建img标记的循环在每次我更新cardCollection时(每次搜索栏中出现新字母时)都会被调用,因此它试图对已更改为一个或多个img组件的内容进行匹配。什么是阻止它这样做的最安全的方法?@Ironwaffelman最安全的方法是停止变异该值,并将其保存到不同的属性或对象
    card.manaImage=parseCost(card.manaCost)。React将尝试解析
    manaCost
    ,它将能够这样做。@Ironwaffelman编辑。让我知道新的解决方案是否适合您。