2016-04-02 4 views
0

Wir schreiben unser currentexpress/jade-frontend um reactjs um. In unserem aktuellen Frontend haben wir Klassen, die Aktionen auslöst, zum Beispiel eine Bootstrap-modal anzuzeigen, wie folgt aus:React: Trigger Aktionen aus der Klasse

$(document).on('click', '.showUserInfo', function(event) { 
    $('#modal-userInfo').modal('show'); 
}); 

Wir haben diese Klassen auf zufällige Elemente (div/Tasten/html) in der Lösung. Das Element, das die Aktion auslöst, ist unterschiedlich, aber die Aktion ist die gleiche.

Konzeptionell habe ich eine schwere Zeit zu verstehen, wie Sie dies in React tun würden. Ich könnte eine Komponente mit dem modalen Element erstellen und damit Elemente umhüllen (d. H. Anstatt die Klasse I mit der neuen Komponente zu umbrechen). Aber würde das nicht zusätzliche Elemente um die umwickelte Komponente erzeugen? Und würde es das Modal nicht an mehreren Stellen um den Code herum erzeugen?

Antwort

0

Erstellen Sie eine Komponente, die zum Umhüllen anderer Elemente verwendet werden kann.

Wenn Sie Flux verwenden, stellen Sie sicher, dass Sie über einen entsprechenden Aktionsersteller verfügen, der eine modale Aktion für die Anzeige auslöst.

Dann wickeln Sie andere React-Komponenten in dieser neuen Komponente ein, um ihnen dieses Verhalten zu geben.

<ShowUserInfo> 
    <ProfilePicture /> 
</ShowUserInfo> 
<Username /> 
+0

Aber würde dies nicht ein unnötiges div um das Element, das ich wrap? Es wird am Ende wahrscheinlich nichts ausmachen, aber es wäre schön, wenn Sie das verpackte Element unverändert lassen könnten, wie Sie es in meiner aktuellen Lösung tun? – mathan

+0

Denken Sie daran, dass Sie einen Klick-Listener nicht direkt zu einer React-Komponente hinzufügen können, da er nicht direkt ein Element im DOM darstellt. Sie müssen also entweder Ihre Komponente umbrechen oder einen Klick-Callback durchreichen Requisiten und hoffen, dass die Child-Komponente es an einen DOM-Knoten anfügt. –

+0

Perfekt. Habe es heute getestet und es funktioniert wie ein Zauber! – mathan

Verwandte Themen