【问题标题】:How to render html elements in Reactjs?如何在 Reactjs 中渲染 html 元素?
【发布时间】:2018-07-11 11:24:17
【问题描述】:

我对 reactjs 很陌生,还在学习它。

我正在尝试返回文件树视图,但它显示了页面上的所有元素,就像这样..

<ul className='folder-container'>
  <li className='folder-item'> app </li>
  <li className='folder-wrapper'><ul className='folder-container'><ul className='folder-container'>
  <li className='file-item'> index.html </li></ul><ul className='folder-container'>
  <li className='folder-item'> js </li>
  <li className='folder-wrapper'>
<ul className='folder-container'>....

我想返回页面上文件夹内所有项目的列表。我想我可以使用组件内的函数返回它。我做得对吗?

我的代码:

class Filetree extends Component {
  constructor({ props }) {
    super(props);
    this.state = {
      folders: [
        {
          type: "dir",
          name: "app",
          children: [
            {
              type: "file",
              name: "index.html"
            },
            {
              type: "dir",
              name: "js",
              children: [
                {
                  type: "file",
                  name: "main.js"
                },
                {
                  type: "file",
                  name: "app.js"
                },
                {
                  type: "file",
                  name: "misc.js"
                }
              ]
            }
          ]
        },
        {
          type: "dir",
          name: "css",
          children: [
            {
              type: "file",
              name: "reset.css"
            },
            {
              type: "file",
              name: "main.css"
            }
          ]
        }
      ]
    };
  }

  displayJsonTree(data) {
    var htmlRetStr = `<ul className='folder-container'>`;
    for (var key in data) {
      if (typeof data[key] === "object" && data[key] !== null) {
        htmlRetStr += this.displayJsonTree(data[key]);
        htmlRetStr += `</ul>`;
      } else if (data[key] === "dir") {
        htmlRetStr += `<li className='folder-item'> ${
          data["name"]
        } </li> <li className='folder-wrapper'>`;
      } else if (key === "name" && data["type"] !== "dir") {
        htmlRetStr += `<li className='file-item'> ${data["name"]} </li>`;
      }
    }
    return htmlRetStr;
  }

  render() {
    const { folders } = this.state;

    return <div>{this.displayJsonTree(folders)}</div>;
  }
}

【问题讨论】:

    标签: javascript html reactjs


    【解决方案1】:

    如果字符串中有 HTML,则可以使用 dangerouslySetInnerHTML

    render() {
      const { folders } = this.state;
    
      return <div dangerouslySetInnerHTML={{ __html: this.displayJsonTree(folders) }} />;
    }
    

    【讨论】:

    • 它有效。但是是否建议像这样返回 html?使用这种危险的SetInnerHTML={{ __html: this.displayJsonTree(folders) }}
    • 有什么更好的办法吗?
    • @Jaz 是的,if you have HTML in a string this is the only way to do it。您应该尽可能使用 JSX。
    • 您能否提供一个如何在此代码中使用 JSX 的示例?我想知道如何使用 JSX。
    • @Jaz 这完全改变了问题。你可以创建一个新问题来问这个问题。
    猜你喜欢
    • 2020-10-09
    • 1970-01-01
    • 2022-01-25
    • 2017-12-23
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    相关资源
    最近更新 更多