Reactjs convert to html

2019-01-01 07:41发布

问题:

I\'m having trouble dealing with facebook\'s ReactJS. Whenever I do ajax and want to display an html data, ReactJS displays it as text. (See figure below)

\"ReactJS

The data is displayed through the success callback function of the jquery Ajax.

$.ajax({
   url: url here,
   dataType: \"json\",
   success: function(data) {
      this.setState({
           action: data.action
      })
   }.bind(this)
});

\"enter

Is there any easy way to convert this into html? How should I do it using ReactJS?

回答1:

By default, React escapes the HTML to prevent XSS (Cross-site scripting). If you really want to render HTML, you can use the dangerouslySetInnerHTML property:

<td dangerouslySetInnerHTML={{__html: this.state.actions}} />

React forces this intentionally-cumbersome syntax so that you don\'t accidentally render text as HTML and introduce XSS bugs.



回答2:

There are now safer methods to accomplish this. The docs have been updated with these methods.

Other Methods

  1. Easiest - Use Unicode, save the file as UTF-8 and set the charset to UTF-8.

    <div>{\'First · Second\'}</div>

  2. Safer - Use the Unicode number for the entity inside a Javascript string.

    <div>{\'First \\u00b7 Second\'}</div>

    or

    <div>{\'First \' + String.fromCharCode(183) + \' Second\'}</div>

  3. Or a mixed array with strings and JSX elements.

    <div>{[\'First \', <span>&middot;</span>, \' Second\']}</div>

  4. Last Resort - Insert raw HTML using dangerouslySetInnerHTML.

    <div dangerouslySetInnerHTML={{__html: \'First &middot; Second\'}} />



回答3:

i found this js fiddle. this works like this

function unescapeHTML(html) {
    var escapeEl = document.createElement(\'textarea\');
    escapeEl.innerHTML = html;
    return escapeEl.textContent;
}

<textarea className=\"form-control redactor\"
                          rows=\"5\" cols=\"9\"
                          defaultValue={unescapeHTML(this.props.destination.description)}
                          name=\'description\'></textarea>

jsfiddle link



回答4:

I recommend using Interweave created by milesj. Its a phenomenal library that makes use of a number if ingenious techniques to parse and safely insert HTML into the DOM.

Interweave is a react library to safely render HTML, filter attributes, autowrap text with matchers, render emoji characters, and much more.

  • Interweave is a robust React library that can:
    • Safely render HTML without using dangerouslySetInnerHTML.
    • Safely strip HTML tags.
    • Automatic XSS and injection protection.
    • Clean HTML attributes using filters.
    • Interpolate components using matchers.
    • Autolink URLs, IPs, emails, and hashtags.
    • Render Emoji and emoticon characters.
    • And much more!

Usage Example:

import React from \'react\';
import { Markup } from \'interweave\';

const articleContent = \"<p><b>Lorem ipsum dolor laboriosam.</b> </p><p>Facere debitis impedit doloremque eveniet eligendi reiciendis <u>ratione obcaecati repellendus</u> culpa? Blanditiis enim cum tenetur non rem, atque, earum quis, reprehenderit accusantium iure quas beatae.</p><p>Lorem ipsum dolor sit amet <a href=\'#testLink\'>this is a link, click me</a> Sunt ducimus corrupti? Eveniet velit numquam deleniti, delectus  <ol><li>reiciendis ratione obcaecati</li><li>repellendus culpa? Blanditiis enim</li><li>cum tenetur non rem, atque, earum quis,</li></ol>reprehenderit accusantium iure quas beatae.</p>\"

<Markup content={articleContent} /> // this will take the articleContent string and convert it to HTML markup. See: https://milesj.gitbook.io/interweave


回答5:

You can also use Parser() from html-react-parser. I have used the same. Link shared.



回答6:

i start using npm package called react-html-parser