React: how to load and render external html file?

后端 未结 4 469
后悔当初
后悔当初 2020-11-30 01:45

I building a small blog app using React and Redux. The blog show Posts page with title, author, tags and description of a post. When clicking on title or \"read more\" butt

4条回答
  •  生来不讨喜
    2020-11-30 02:30

    The way I see it is that you have 2 problems to solve here. The first is how to set the innerHTML of an element in React. The other is how to get a specific HTML to render depending on a given variable (e.g the current route, the input of a textfield, etc).

    1. Setting the innerHTML of an element

    You can do this with the dangerouslySetInnerHTML prop. As the name suggests it sets the innerHTML of the said element to whatever you specify... and yes, the "dangerously" is accurate as it's intended to make you think twice before using this feature.

    The Official Documentation reads as follows:

    Improper use of the innerHTML can open you up to a cross-site scripting (XSS) attack. Sanitizing user input for display is notoriously error-prone, and failure to properly sanitize is one of the leading causes of web vulnerabilities on the internet.

    Check out this Demo or the snippet below.

    var Demo = React.createClass({
    
      getInitialState: function() {
        return {showExternalHTML: false};
      },
      
      render: function() {
        return (
          
    {this.state.showExternalHTML ?
    : null}
    ); }, toggleExternalHTML: function() { this.setState({showExternalHTML: !this.state.showExternalHTML}); }, createMarkup: function() { return {__html: '
    Hello!
    '}; } }); ReactDOM.render( , document.getElementById('container') );
    .ext {
      margin-top: 20px;
      width: 100%;
      height: 100px;
      background: green;
      color: white;
      font-size: 40px;
      text-align: center;
      line-height: 100px;
    }
    
    
    


    2. Fetching the HTML from an external source

    Note that the above example does not actually get the HTML from an external file, but is entered directly as a string.

    One simple way to do dynamically fetch a choose a specific file would be to let your backend (e.g php) read the file from a local folder, parse the text, and send it back through an AJAX request.

    Example

    //Your React component
    fetchExternalHTML: function(fileName) {
      Ajax.getJSON('/myAPI/getExternalHTML/' + fileName).then(
        response => {
          this.setState({
            extHTML: response
          });
        }, err => {
          //handle your error here
        }
      );
    }
    

提交回复
热议问题