javascript - react : HTML not rendering correctly

标签 javascript html reactjs rendering

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

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>
    );
  }

}

后端工作正常,componentWillMount 获取正确的文本并完美地转换它。但它的渲染效果是这样的:

enter image description here

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

有什么建议吗?

最佳答案

使用我在下面描述的dangerouslySetInnerHTML方法。

Go through this link to see the proper documentation about dangerouslySetInnerHTML and it's side effects

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')
)
<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>

关于javascript - react : HTML not rendering correctly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45408208/

相关文章:

JavaScript/jQuery getSelection 高亮合并span html元素

javascript - 当我将 js 文件转移到静态文件夹中时,文本消失

html - 彼此相邻的 div 与彼此顶部的嵌套 div?

reactjs - 同一组件上具有不同路径的 React Router : does not re-initialize component (useEffect [] not called)

javascript - 为什么 React 不更新 DOM?

javascript - 从缓存 Angular 1 中删除一天旧模板?

javascript - 调用方法时页面刷新(不需要)

javascript - Angular-UI 中的按键

javascript - jQuery 用户界面 : Increase the padding on resizeable()

javascript - react : How to Show Message if there is no records