【问题标题】:Apanding external HTML to a react component is not working将外部 HTML 扩展到反应组件不起作用
【发布时间】:2023-03-11 07:09:01
【问题描述】:

基本上我想从外部脚本向反应组件添加静态 HTML。

所以我将this 的引用保存到窗口变量如下:

let { PropTypes } = React;

export default class Body extends React.Component {
  constructor(){
    super();
    let frmTrgt={};
    frmTrgt.refff=this;
    console.log("tthis: ",this);
    window.bdyRefrence=frmTrgt;
  }
  static defaultProps = {
    items: []
  };

  static propTypes = {
    items: PropTypes.array.isRequired
  };

  render() {
    return (
      <div className={styles.body}>
        <h1 className={styles.header}>React Seed</h1>
        <p>This is an example seed app, powered by React, ES6 &amp; webpack.</p>
        <p>Here is some example data:</p>
        <Menu items={this.props.items} />
        <div>
          <h1>Dynamic Content</h1>
          <div id="myDynamicContent"></div>
        </div>
      </div>
    );
  }
}

在 INDEX.html(外部脚本)中的脚本标记中,我正在执行以下操作:

function addPHtml() {
      try {
        window.bdyRefrence.refff.refs.formTarget.insertAdjacentHTML("<p id='mhere'>paragraph 2</p>");
      }catch (err){
        console.log("err: ",err);
      }
    }

但是当我调用 addPHtml 时出现以下错误:

err:  TypeError: Cannot read property 'insertAdjacentHTML' of undefined
    at addPHtml ((index):19)
    at <anonymous>:1:1

【问题讨论】:

  • 'Window' 在 React 中的行为不同,您可以通过“componentDidMount()”方法访问,但不能在构造函数中访问。您必须渲染它,然后在渲染组件后,使用 window 对象
  • 同样的错误 移动到 componentDidMount() 后还是不行
  • 你的 formTarget 参考在哪里??

标签: javascript reactjs components


【解决方案1】:

您尝试做的不是在 React 中插入元素的正确方法,仍然为您的要求,请参考下面提到的代码

你的渲染函数应该是这样的

return(
    <div>
    <div ref="formTarget"></div>
    <h1 >React Seed</h1>
    <p>This is an example seed app, powered by React, ES6 &amp; webpack.</p>
    <p>Here is some example data:</p>
    <div>
      <h1>Dynamic Content</h1>
      <div id="myDynamicContent"></div>
    </div>
  </div>
  )

请在此处查看演示Demo

如果使用新的 React 语法(现在不推荐使用 Createclass),请使用

window.refferedItem.refs.formTarget.getDOMNode().insertAdjacentHTML

【讨论】:

  • 在我的情况下它抛出错误'window.bdyRefrence1.refs.formTarget.insertAdjacentHTML is not a function'
  • 替换为 'window.bdyRefrence1.refs.formTarget.getDOMNode().insertAdjacentHTML('
  • @AkhileshKumar:如果我更新了 Plunker,那么它在那里不起作用,所以你可以接受答案,因为 plunker 工作正常,如果有人参考,那么他/她将根据他的参考编写语法/她在他们的组件中声明:)
  • 所以在你的回答中提到如果使用 createReactClass 那么他们应该使用 window.bdyRefrence1.refs.formTarget.getDOMNode().insertAdja‌​centHTML
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-13
  • 2019-08-26
  • 2020-12-20
  • 1970-01-01
相关资源
最近更新 更多