Ich brauche einen visuellen Editor für eine HTML-Seite zu bauen. Es scheint, dass ReactJS dafür eine gute Wahl ist. Zur Zeit stand ich mit folgendem Problem:Gibt es eine Möglichkeit, den von React erstellten Baum zu durchqueren?
ich meine Daten modelliert:
var Model = {
title: 'Hello',
description: 'Pellentesque eleifend urna ac purus tempus...',
date: new Date().toString()
};
Und mit der integrierten Komponente, die ihre Daten in der obigen Struktur speichert:
var App = React.createClass({
getInitialState: function() {
return {
value: Model
}
},
handleMouseEnter: function (event) {
$(event.target).css('outline', '1px solid red').attr('contenteditable', true);
},
handleMouseLeave: function (event) {
var t = $(event.target), v = this.state.value;
t.css('outline', 'none').attr('contenteditable', false);
v[t.attr('property')] = t.text();
this.setState({value: v});
},
render: function() {
var v = this.state.value;
return (
<div>
<pre style={{whiteSpace: 'normal'}}>{JSON.stringify(this.state)}</pre>
<h1 onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave} property="title">{v.title}</h1>
<p onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave} property="description">{v.description}</p>
<p onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave} property="date">{v.date}</p>
</div>
);
}
});
React.renderComponent(<App />, document.getElementById('app'));
In diesem speziellen Fall es funktioniert. Aber ich will loswerden onMouseEnter
und onMouseLeave
Eigenschaften und nur property
Feld zu bleiben. Wie folgt aus:
<pre style={{whiteSpace: 'normal'}}>{JSON.stringify(this.state)}</pre>
<h1 property="title">{v.title}</h1>
<p property="description">{v.description}</p>
<p property="date">{v.date}</p>
dachte ich über mixin zu schaffen. Dann innerhalb componentDidMount
Ereignis, fügen Sie Handler für alle Elemente mit property
Attribut. Aber ich habe keinen Weg gefunden, dies zu erreichen.
Meine Frage ist: Gibt es eine Möglichkeit Baum durch Reagieren gebaut zu durchqueren? Ich bemerkte, dass Reagieren Developer Tools (Chrome Extension) das tun kann.
ähnliche Frage: React.js component creating parent child relations and iterating
Sie brauchen also eine Möglichkeit, die vom Elternteil generierten Kindkomponenten zu durchlaufen? Verfügen Sie in Ihrem Elternelement über einen Status, der ein Array Ihrer Modelle speichert. Dann können Sie in der Darstellung '' 'array.map''' verwenden, um jedes dieser Modelle im Array zu durchlaufen und eine untergeordnete Komponente zurückzugeben, die die eventHandlers- und die Modelldaten von der übergeordneten – trekforever
@trekforever bad-Lösung übergibt. Damit brauche ich noch ein Modell - für View, aus dem DOM-Knoten generiert werden. http: // jsfiddle.net/kb3gN/6684/ – vbarbarosh
Ich bin verwirrt, warum Sie tun würden, was Sie beschreiben - vielleicht weitere Ausarbeitung darüber, was genau Sie versuchen, das kann nicht nur mit 'array.map' erreicht werden? –