Wie verwende ich FormattedMessage in einem Options-Tag in React 0.14?

8

Ich versuche meine Anwendung von React 0.12 nach React 0.14 zu migrieren und habe Probleme mit Optionselementen, die react-intl FormatierteMessage-Objekte, die in ausgewählte Tags eingefügt werden.

Hier ist ein Beispiel JSX-Code:

%Vor%

Dieser Code funktioniert in React 0.12 und ich sehe meine übersetzten Optionselemente.

In Reaktion 0.14 habe ich diesen Fehler:

%Vor%

Ich habe die Nachricht zu diesem Änderungssatz in React verfolgt, der Anfang des Jahres passiert ist:

Ссылка

Wie kann ich dieses Problem beheben? Ich kann nicht der einzige sein, der versucht, internationalisierte Optionselemente zu verwenden?

    
Jason Keirstead 30.10.2015, 17:19
quelle

4 Antworten

12

Das war schon immer ein Problem. Reagiere & lt; 0.14 verwendet, um eine ungültige DOM-Struktur stillschweigend zu akzeptieren, in Ihrem Fall <span> elements in <option> elements. Der Browser würde dann die DOM-Struktur korrigieren und bewirken, dass das von React verwaltete virtuelle DOM nicht mehr mit der realen Sache übereinstimmt. Sie würden keine Fehler sehen, bis Sie versucht haben, vorhandene Komponenten neu zu rendern, anstatt sie einfach neu zu mounten.

react-intl V2.0.0, das mit der Unterstützung von React 0.14 ausgeliefert wird, ermöglicht es Ihnen, das Funktion-als-Kind-Muster zu verwenden, um die Art und Weise anzupassen, wie Ihre Formatted* -Komponenten rendern. Lesen Sie den Abschnitt "Unterstützung von Funktionen als Kind" auf dieses Problem .

In Ihrem Fall würden Sie tun:

%Vor%

Ich glaube nicht, dass es einen Weg gibt, dies auf der aktuellen stabilen Version 1.2.1 zu erreichen.

    
Alexandre Kirszenberg 30.10.2015 17:43
quelle
10

Ich hatte das gleiche Problem und löste es über die injectIntl ​​().

  

Diese Funktion wird verwendet, um eine Komponente zu umbrechen und das von dem IntlProvider erstellte Prop-Objekt als Prop für die umbrochene Komponente einzufügen. Die Verwendung der HOC-Factory-Funktion verringert die Notwendigkeit, dass der Kontext Teil der öffentlichen API ist.

Das heißt, Sie müssen Ihre Komponente nur mit der injectIntl-Funktion wie folgt umschließen:

%Vor%

Ich hoffe, das hilft ...

    
Alexander 19.04.2016 14:46
quelle
2

Als eine etwas bessere Alternative zu @Alexandre Kirszenberg Antwort, ist es auch möglich, intl -Objekt in die Komponente zu injizieren und formatMessage function direkt zu verwenden,

%Vor%     
Alexander Beletsky 22.03.2016 09:33
quelle
0

Verwenden Sie injectIntl , um die Komponente, in der Sie die API verwenden möchten, zu umbrechen, damit Sie die API verwenden können, z. B. formattedMessage und so weiter. Siehe react-intl / wiki / API

    
jialin wang 17.08.2017 08:49
quelle

Tags und Links