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编辑。让我知道新的解决方案是否适合您。