Mam specjalny przypadek, w którym muszę hermetyzować komponent odpowiedzi za pomocą składnika sieci Web. Konfiguracja wydaje się bardzo prosta. Oto kod React:Zdarzenie kliknięcia nie jest wyzwalane, gdy komponent reaguje w cieniu DOM
// React Component
class Box extends React.Component {
handleClick() {
alert("Click Works");
}
render() {
return (
<div
style={{background:'red', margin: 10, width: 200, cursor: 'pointer'}}
onClick={e => this.handleClick(e)}>
{this.props.label} <br /> CLICK ME
</div>
);
}
};
// Render React directly
ReactDOM.render(
<Box label="React Direct" />,
document.getElementById('mountReact')
);
HTML:
<div id="mountReact"></div>
Ten wierzchowiec grzywny i prace zdarzeń kliknięcia. Teraz, gdy utworzyłem element opakowania składnika Web wokół komponentu odpowiedzi, renderuje się on poprawnie, ale zdarzenie kliknięcia nie działa. Oto mój składnik Web Wrapper:
// Web Component Wrapper
class BoxWebComponentWrapper extends HTMLElement {
createdCallback() {
this.el = this.createShadowRoot();
this.mountEl = document.createElement('div');
this.el.appendChild(this.mountEl);
document.onreadystatechange =() => {
if (document.readyState === "complete") {
ReactDOM.render(
<Box label="Web Comp" />,
this.mountEl
);
}
};
}
}
// Register Web Component
document.registerElement('box-webcomp', {
prototype: BoxWebComponentWrapper.prototype
});
A oto HTML:
<box-webcomp></box-webcomp>
Czy coś mi brakuje? Czy React odmawia pracy w komponencie sieciowym? Widziałem bibliotekę podobną do Maple.JS, która robi tego typu rzeczy, ale ich biblioteka działa. Czuję, że brakuje mi jednej małej rzeczy.
Oto CodePen tak widać problem:
http://codepen.io/homeslicesolutions/pen/jrrpLP
O czym jest ten specjalny przypadek, o którym mówisz? czy to tylko do eksperymentów? – Seth
@Seth Just a Proof of concept, aby sprawdzić, czy możemy zamknąć składnik React w komponencie Web, abyśmy mogli go użyć w niektórych naszych aplikacjach, które nie mają React jako głównej struktury. Może to być podejście dalekosiężne, ale po prostu chcesz sprawdzić, czy to możliwe. – josephnvu