Ich arbeite an einer kartenbasierten App, die die Google Map-API verwendet, um Markierungen und ihr Informationsfenster in React.js zu erstellen. Die infowindow.setContent()
akzeptiert nur entweder String
oder HTML
. Es ist unmöglich für mich, String
zu übergeben, da ich eine button
habe, die eine Verbindung zu einer bestimmten Methode in einer anderen Reaktionskomponente herstellt (etwas wie: _this.props.addList(place)
). So muss ich das Argument als HTML-DOM wie die folgenden Codezeilen füllen:React.js: Ist es möglich, eine reaktive Komponente in HTML DOMs umzuwandeln?
var div = document.createElement('div');
var title = document.createElement('h4');
title.innerHTML = place.name;
var btn = document.createElement('button');
btn.className = 'btn btn-danger btn-block';
btn.appendChild(document.createTextNode('I want to go here !!'));
div.appendChild(title).appendChild(btn);
google.maps.event.addListener(marker, 'click', function() {
infowindow.setContent(div);
infowindow.open(map, this);
});
btn.addEventListener('click', function() {
_this.props.addList(place);
});
Die Codes für mich arbeiten, aber ich will nicht schaffen eine Elemente nach dem anderen. Ich habe auch versucht, mit einem Reagieren Komponente, das Argument zu übergeben, aber es scheint nicht funktioniert:
createMarker: function() {
/** Some other lines of code */
var _this = this;
google.maps.event.addListener(marker, 'click', function() {
infowindow.setContent(_this._renderInfoWindow(place));
infowindow.open(map, _this);
});
},
// my infowindow rendering method
_renderInfoWindow: function(place) {
return(
<div>
<h4>{place.name}</h4>
<p>{place.cost}</p>
<button className="btn btn-danger btn-block" onClick={this.props.addList.bind(this, place)}>I want to go here !! </button>
</div>
)
},
so gibt es eine andere Art und Weise eine Komponente in HTML zu mindestens konvertieren reagieren, so dass ich don muss nicht document.createElement()
eins nach dem anderen schreiben?
Dank
Ich habe den folgenden Fehler: "Uncaught Fehler: Invariant Verletzung: React.render(): Ungültige Komponente Element." bei der Anwendung Ihrer Lösung –
habe die Lösung, sorry. Das liegt daran, dass der Code React.remer() vor der Erstellung des Elements ausgeführt wird. Hier ist die Lösung: var div = document.createElement ('div'); \t \t \t setInterval (function() { \t \t \t \t if (div) \t \t \t \t \t clearInterval(); \t \t \t}, 5); \t \t \t React.render (_this._renderInfoWindow (Ort), div); –
Blättert '_this' nicht zum globalen Bereich ohne eine 'var' davor? Ist das beabsichtigt? – wprl