反应:HTML无法正确呈现

Ed *_*ida 0 html javascript rendering reactjs

我有这个React组件,其主要目标是在将文章存储为MarkDown(.md文件)并通过将其转换为HTML之后,呈现该文章marked

Articles.js

import React from 'react';
import marked from 'marked';
import './articles.css';

export default class Articles extends React.Component {

  constructor(props) {
    super(props);
    this.state = {
      articles: [],
      last_article: ""
    }
  }

  componentWillMount() {
    fetch('/last_article', {
      headers: {
        'Accept': 'text/markdown'
      }
    })
    .then(res => res.text())
    .then(txt => marked(txt))
    .then(html => {
      this.setState({
        last_article: html
      });
    });
  }

  render() {
    return (
      <div className="articles">
        {this.state.last_article}
      </div>
    );
  }

}
Run Code Online (Sandbox Code Playgroud)

后端工作正常,可以componentWillMount获取正确的文本并将其完美转换。但是它呈现为:

在此处输入图片说明

我不是React专家,以前从未遇到过这个问题。

有什么建议么?

Anu*_*sht 5

使用如下所述的dangerouslySetInnerHTML方法。

浏览此链接以查看有关dragonallySetInnerHTML及其副作用的正确文档。

class Articles extends React.Component {

  constructor(props) {
    super(props);
    this.state = {
      articles: [],
      last_article: ""
    }
  }

  componentWillMount() {
      this.setState({
        last_article: `<h1>Hello</h1>`
      });
    
  }
  
  getMarkdownText() {
    return { __html: this.state.last_article };
  }

  render() {
    return (
      <div className="articles" dangerouslySetInnerHTML={this.getMarkdownText()}/> 
      );
  }

}

ReactDOM.render(
  <Articles />,
  document.getElementById('root')
)
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

<div id="root"></div>
Run Code Online (Sandbox Code Playgroud)