react use dangerouslySetInnerHTML to render json with html tags
Solution 1
React is complaining about the use of dangerouslySetInnerHTML
in conjunction with safe react children, that happened when you let the div tag opened to such characteristic <div>open and ready for children</div>
.
Since you are using the JSX syntax extension, the solution here is write the whole sentence in a single line:
<div dangerouslySetInnerHTML={{__html: item.text}}></div>
or just using a singleton div tag:
<div dangerouslySetInnerHTML={{
__html: item.text
}}/>
By the way you are not getting the error on jsbin because it is a react production build, this build is not meant to tell you what could be written better.
Solution 2
Remove the enclosing tag of your div
element in your component so that it looks like the following code:
<li key={i}>
<div dangerouslySetInnerHTML={{
__html: item.text
}} />
</li>
According to this, it should remove the warning.
zizi
Updated on June 09, 2022Comments
-
zizi over 1 year
I am trying to render a json list with html tags in the string in a list as follows jsbin. It works in Jsbin. But in my console I got warning below:
warning Only set one of `children` or `props.dangerouslySetInnerHTML` react/no-danger-with-children
just wonder if there is other way to render the list with dangerouslySetInnerHTML to avoid the warning?
const displayList = [ { item: 1, text: "<strong>ABC</strong> this should be strong." }, { item: 2, text: "<a>ABC</a> this should be link." }, { item: 3, text: "normal text" } ]; const App = () => ( <ul> {displayList.map((item, i) => ( <li key={i}> <div dangerouslySetInnerHTML={{ __html: item.text }}> </div> </li> ))} </ul> ); ReactDOM.render( <App />, document.getElementById('root') );