亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 react.js 中克隆后內聯事件處理程序不起作用

在 react.js 中克隆后內聯事件處理程序不起作用

牛魔王的故事 2021-11-25 15:26:37
大家好,我在嘗試克隆反應組件(克隆反應組件的父 div)時觀察到一個問題,這使得內聯事件處理程序以某種方式被禁用/刪除,并且克隆組件無法觸發任何事件,但原始組件工作正常。據我搜索,javascript cloneNode 方法應該適用于內聯事件處理程序,它也適用于純 html 和 javascript,但不知何故我似乎無法讓它在 react.js 中工作索引.jsimport React from 'react';import ReactDOM from 'react-dom';class Football extends React.Component {  shoot() {    alert("Great Shot!");  }  render() {    return (      <button onClick={this.shoot}>Take the shot!</button>    );  }}ReactDOM.render(<Football />, document.getElementById('root'));索引.html<!DOCTYPE html><html>  <head>    <meta charset="utf-8" />    <meta name="viewport"      content="width=device-width, initial-scale=1" />    <title>React App</title>  </head>  <body>    <div id="root"></div>     <button "onclick=CloneIt()">CloneIt</button><script>function CloneIt(){var elem=document.getElementById("mainComp").cloneNode(true);document.body.appendChild(elem);}</script>  </body></html>
查看完整描述

1 回答

?
ibeautiful

TA貢獻1993條經驗 獲得超6個贊

React 實際上并沒有創建內聯事件,即使您內聯編寫事件也是如此。


JSX 并不是真正的 html,它只是React.createElement被 babel轉換為 react 的語法糖。


所以你的內聯 onClick 事件實際上變成props.onClick了 props 對象的一個屬性,作為第二個參數傳遞給 React.createElement。


內部反應使用addEventListener.


當您克隆一個 React 元素并將其附加到 DOM 時,新附加的元素將不會有任何指向 React 組件的鏈接。所以,如果你想讓 onClick 事件像處理原始 DOM 一樣工作,你需要用 react 組件來填充元素。


var elem = document.getElementById("root").cloneNode(true);

document.body.appendChild(elem);

ReactDOM.hydrate(<Football />, elem);


查看完整回答
反對 回復 2021-11-25
  • 1 回答
  • 0 關注
  • 197 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號