Das ist mein Senario:
1. Antrag Antrag CMS (Content-Management-System) für den Inhalt der Seite.
2. CMS Rückkehr "<div>Hi,<SpecialButton color="red">My Button</SpecialButton></div>"
3. Anwendung verbrauchen die Inhalte, machen mit Daten entsprechende Komponente in Attribut versehen.Wie HTML zu React Komponente zu analysieren?
Ich kann nicht herausfinden, wie man Schritt 3 in Reactive Weise tut, wird jeder möglicher Rat geschätzt.
Dank @Glenn Reyes, hier ist ein Sandbox das Problem zu zeigen.
import React from 'react';
import { render } from 'react-dom';
const SpecialButton = ({ children, color }) => (
<button style={{color}}>{children}</button>
);
const htmlFromCMS = `
<div>Hi,
<SpecialButton color="red">My Button</SpecialButton>
</div>`;
const App =() => (
<div dangerouslySetInnerHTML={{__html: htmlFromCMS}}>
</div>
);
// expect to be same as
// const App =() => (
// <div>Hi,
// <SpecialButton color="red">My Button</SpecialButton>
// </div>
//);
render(<App />, document.getElementById('root'));
Here is a live demo von Vuejs gemacht. Die Zeichenfolge "<div v-demo-widget></div>"
könnte als Vuejs-Anweisung behandelt und gerendert werden. Source Code.
Ich habe keine, eine definitive Antwort für Sie, Andy, aber könnte Sie in eine Richtung zeigen, abhängig davon, wie Sie die CMS-Daten erhalten. Haben Sie versucht, eine Komponente höherer Ordnung zu verwenden, um die Komponente zurückzugeben, die von der Anfrage zurückkommt? Ich denke, dass eine Komponente, die dann die angeforderte Komponente darstellt, der richtige Weg ist. –
@BrettEast, eine höhere Ordnung Komponente die Anforderung tun könnte, aber mein Problem ist, nachdem die Zeichenfolge wie '
Hallo
bekommenJa, das ist knifflig, jede Chance, dass Ihre eingehenden Daten auf Benennungsmuster reagieren, mit einem Großbuchstaben für reagierende Komponenten und Kleinbuchstaben für HTML-Elemente? Vielleicht könnte eine Regex den Trick machen? –