带有反应的innerHtml中的onclick元素

Posted

技术标签:

【中文标题】带有反应的innerHtml中的onclick元素【英文标题】:onclick element in innerHtml with react 【发布时间】:2019-02-19 12:32:13 【问题描述】:

在一个组件中,我调用一个函数来实现这个动作: .....

  
    .....
    .....
    const functionExam = () => 
    functionExam = function()
    .......
    ......
    node.innerhtml = `<div onclick="functionExam">AAAAAAAAAA</div>`;
    ....
    ....
    


functionExam = () => 
render().....

......

所以,我想当点击 AAAAAA 时,它会调用 fuctionExam,但它有一个错误:

-----Uncaught TypeError: functionExam is not a function
    at HTMLSpanElement.functionExam
------functionExam is not a function
------functionExam is not defined...
...., i tried every way but it still didn'd, please help me.Thank you so much.

【问题讨论】:

你好,不是直接回答,而是推荐。 React 建议你不要直接通过 innerHTML 与 dom 交互。如果确实需要设置一些内部html,可以使用dangerously set inner html in its place 【参考方案1】:

那是因为您的 functionExam 存在于您的文件中,而不是全局(窗口)范围内。首先,在使用 React 时不应该使用 innerHTML。制作一个 React 组件,然后从中监听事件。

function MyDiv() 
  return (<div onClick=functionExam>AAAAAAAAAA</div>);


function functionExam () 
  // things happen

【讨论】:

【参考方案2】:

由于 React 中有两种类型的组件,例如功能组件和类组件。 1. 功能组件然后按照下面的代码。

function ActionComponent() 
  function functionExam() 
    console.log('The inner html was clicked.');
  

  return (
    <div onClick=handleClick>AAAAAAAAA</div>
  );

2。类组件如下。

class ActionComponent extends React.Component 
  constructor(props) 
    super(props);

    // This binding is necessary to make `this` work in the callback
    this.functionExam = this.functionExam.bind(this);
  

  functionExam() 
    console.log('The inner html was clicked.');
  

  render() 
    return (
      <div onClick=this.functionExam>AAAAAAAAA</div>
    );
  

如果调用 bind 让你感到厌烦,有两种方法可以使用 箭头函数 来解决这个问题。

class ActionComponent extends React.Component 

  // This syntax ensures `this` is bound within functionExam.
  functionExam = () => 
    console.log('The inner html was clicked.');
  

  render() 
    return (
      <div onClick=this.functionExam>AAAAAAAAA</div>
    );
  

箭头函数的另一种使用方式如下:

class ActionComponent extends React.Component 

  functionExam() 
    console.log('The inner html was clicked.');
  

  render() 
    return (
      <div onClick=()=>this.functionExam>AAAAAAAAA</div>
    );
  

注意:

    您可以将任何有效的 javascript 表达式放入 curly JSX 中的大括号 React 使用驼峰式案例。所以使用 onClick 而不是 onclick。 不要在反应中使用 innerHTML。

尝试在组件(即函数或类组件)或可以通过道具访问的父级别进行functionExam。 请让我知道天气,我能回答你的问题。

【讨论】:

以上是关于带有反应的innerHtml中的onclick元素的主要内容,如果未能解决你的问题,请参考以下文章

在javascript使用element.innerHTML创建的元素上触发onclick事件[重复]

jQuery使用数据目标更改带有onClick侦听器的一组单选按钮标签的innerHtml

DOM事件操作

通过纯 JS 从 tablerow//<tr onClick(myFunction> 获取 element.innerHTML

ReactJS:如何通过反应正确播放带有 onClick 事件的 html5 视频?

反应材料 ui 自动完成元素焦点 onclick