これが私が試したことと、それがどうやってうまくいかないかです。
これは動作します:
<div dangerouslySetInnerHTML={{ __html: "<h1>Hi there!</h1>" }} />
そうではありません。
<div dangerouslySetInnerHTML={{ __html: this.props.match.description }} />
Descriptionプロパティは、通常のHTMLコンテンツの文字列です。しかし、それは文字列としてレンダリングされ、何らかの理由でHTMLとしてはレンダリングされません。
助言がありますか?
this.props.match.description
は文字列ですか、それともオブジェクトですか?もしそれが文字列であれば、それはHTMLにうまく変換されるべきです。例:
class App extends React.Component {
constructor() {
super();
this.state = {
description: '<h1 style="color:red;">something</h1>'
}
}
render() {
return (
<div dangerouslySetInnerHTML={{ __html: this.state.description }} />
);
}
}
ReactDOM.render(<App />, document.getElementById('root'));
結果: http://codepen.io/ilanus/pen/QKgoLA?editors=1011
ただし、description: <h1 style="color:red;">something</h1>
を引用符なしで''
とすると、次のようになります。
Object {
$$typeof: [object Symbol] {},
_owner: null,
key: null,
props: Object {
children: "something",
style: "color:red;"
},
ref: null,
type: "h1"
}
もしそれが文字列で、HTMLマークアップを見ていないのなら、私が目にする唯一の問題は間違ったマークアップです。
UPDATE
あなたがHTMLEntitlesを扱っているならば。あなたはそれらをdangerouslySetInnerHTML
に送る前にデコードする必要があります。
作業例:
class App extends React.Component {
constructor() {
super();
this.state = {
description: '<p><strong>Our Opportunity:</strong></p>'
}
}
htmlDecode(input){
var e = document.createElement('div');
e.innerHTML = input;
return e.childNodes.length === 0 ? "" : e.childNodes[0].nodeValue;
}
render() {
return (
<div dangerouslySetInnerHTML={{ __html: this.htmlDecode(this.state.description) }} />
);
}
}
ReactDOM.render(<App />, document.getElementById('root'));
Htmlを含む文字列がどこから来ているのか(例えば、あなたのアプリのどこかで)制御できれば、新しい<Fragment>
APIの恩恵を受けることができます。
import React, {Fragment} from 'react'
const stringsSomeWithHtml = {
testOne: (
<Fragment>
Some text <strong>wrapped with strong</strong>
</Fragment>
),
testTwo: `This is just a plain string, but it'll print fine too`,
}
...
render() {
return <div>{stringsSomeWithHtml[prop.key]}</div>
}
私は「react-html-parser」を使用しました
yarn add react-html-parser
import ReactHtmlParser from 'react-html-parser';
<div> { ReactHtmlParser (html_string) } </div>
Npmjs.comのソース