动态 HTML 字符串以响应组件

IT技术 javascript reactjs
2021-05-06 13:59:08

我将从我的模板渲染中获取动态 html 内容,该内容由其他 react 组件渲染。我将如何将此 html 字符串转换为 React 组件,以便我可以在渲染函数中使用该组件。请注意,我想保留用于差异的react特定属性。

React.createClass( {
  var self = this;

  componentWillMountDown : function() {
    //htmlString is essentially huge dynamic one in my actual case
    var htmlString = "<div class='classDiv' react-id="0.1"><input type='text'/></div>";
    self.setState({responseString : htmlString});
    self.forceUpdate();
  },
    
  render: function() {
    var Response = this.state.responseString;
    //how would I return the react component as response?
    return (<Response/>); //does not work. err is it shd be valid react component
   }
});

我尝试将 htmlString 转换为 HTMLDocument 对象,并在 willmount 回调中递归创建 React.createElement 并设置 react 组件。但是,错误是未定义 toUpperCase 类型。

3个回答

几个小时前,我html-to-react在 npm ( https://www.npmjs.com/package/html-to-react ) 中发布了一个module,可能会对您有所帮助。

如果您有任何需要,请告诉我,我当然可以与您合作,使module更加灵活。

因为您将组件存储为字符串,所以您必须使用dangerouslySetInnerHTML. 这是我的建议。我希望其他人会有更好的答案。:)

    render: function() {
    var self = this;
    var Response = React.createClass({
        render: function(){
        return (<div dangerouslySetInnerHTML={{__html: self.state.responseString}}></div>)
        }
    });
    return (
            <Response />
    )
   }

您可以使用 React HTML 解析器。这是链接React HTML Parser

它是一个将 HTML 字符串转换为 React 组件的实用程序。避免使用危险的 SetInnerHTML 并将标准 HTML 元素、属性和内联样式转换为它们的 React 等效项。