2015-04-16 8 views
5

Ich habe text-align: justify verwendet, um Menüs gleichmäßig zu verteilen. Nach diesem und es funktioniert perfekt.ReactJS: Textausrichtung funktioniert nicht

Es bricht jedoch, wenn ich ReactJS verwende, um die Ansicht zu erstellen. Ein Vergleich kann hier gefunden werden: http://jsfiddle.net/j7pLprza/1/. Ich benutze diese beiden einfachen Komponenten, um die Menüs zu füllen:

var MenuItem = React.createClass({ 
    render: function() { 
     return (
      <li> 
       {this.props.title} 
      </li> 
     ); 
    } 
}); 

var TopMenus = React.createClass({ 
    render: function() { 
     return (
      <div className="break"> 
      <nav> 
       <ul> 
        {this.props.menus.map(function(menu) { 
         return (<MenuItem title={menu.title} />); 
        })} 
       </ul> 
      </nav> 
      </div> 
     ); 
    } 
}); 

Nach Exploration, ich denke, es durch ReactJS verursacht wird, die alle Zeilenumbruch und white-space nach <li> Artikel entfernt. Dies wird text-align: justify deaktivieren.

Es passiert auch für AngularJS (aber ich kann es mit einer add-space-all Richtlinie beheben).

Ich erreichte nur dieses Problem nach dem googeln: https://github.com/facebook/jsx/issues/19. Aber ich habe mich schnell verlaufen.

Ich habe versucht, einige zusätzliche Inhalte wie {'\n'} und {' '} hinzuzufügen, aber ReactJS meldet Syntaxfehler.

Bitte helfen. Vielen Dank.


UPDATE 1:

Nach der akzeptierten Antwort, meine Menüs funktioniert in Chrome Emulator. Allerdings, wenn ich von iPhone 5c (Chrome-Browser) besuche, ist das Ergebnis, als ob der zusätzliche Speicherplatz nicht erkannt wird.

Nach verschiedenen Kombinationen versuchen, diese funktionieren:

var TopMenus = React.createClass({ 
    render: function() { 
     return (
      <div className="break"> 
      <nav> 
       <ul> 
        {this.props.menus.map(function(menu) { 
         return [(<MenuItem title={menu.title} />), '&nbsp; ']; 
        })} 
       </ul> 
      </nav> 
      </div> 
     ); 
    } 
}); 

Bitte beachten, dass der zusätzliche Platz in &nbsp; notwendig ist. Fehlende entweder &nbsp; oder bricht es.

Es funktioniert dann auf Nexus 7, iPhone 5c (Chrome und Safari). Allerdings kenne ich den genauen Grund nicht. Wenn jemand weiß, bitte helfen Sie.


UPDATE 2:

Noch Buggy. Also wechselte ich zu Flex layout. Und es ist super einfach. Ein Beispiel ist: http://jsfiddle.net/j7pLprza/4/

+1

React nichts in diesem Fall nicht entfernen, da kein Leerzeichen ist zwischen Elemente an erster Stelle. Wenn Sie Leerzeichen zwischen den li-Elementen hinzufügen möchten, können Sie das Array mit '' ''verschachteln. Beispiel: http://jsfiddle.net/j7pLprza/2/ –

+0

Danke, @FelixKling. Es klappt!. Bitte lege es in die Antwort. – Joy

+0

Ich habe nicht geantwortet, weil es ein bisschen nervig von einem iPad ist.Es stellt sich jedoch heraus, dass es mit der StackExchange-App recht gut funktioniert :) –

Antwort

9

React entfernt in diesem Fall nichts, da zwischen den Elementen kein Leerraum vorhanden ist. Wenn Sie Leerräume zwischen den Elementen li hinzufügen möchten, können Sie das Array mit ' ' verschachteln. In diesem Fall ist es so einfach wie eine Anordnung aus der .map Funktion zurückkehrt (Arrays abgeflacht sind):

var TopMenus = React.createClass({ 
    render: function() { 
     return (
      <div className="break"> 
      <nav> 
       <ul> 
        {this.props.menus.map(function(menu) { 
         return [<MenuItem title={menu.title} />, ' ']; 
        })} 
       </ul> 
      </nav> 
      </div> 
     ); 
    } 
}); 

Beispiel: https://jsfiddle.net/j7pLprza/2

+0

Also ohne Leerzeichen zwischen ihnen, werden alle 'li' zusammen betrachtet als ein einziges" Wort ", das zusammen geprügelt wird? – sabithpocker

+0

Hallo, @FelixKling. Der Code funktioniert gut in Chrome Emulator, funktioniert aber nicht, wenn ich von einem echten iPhone 5 besuche, wo das 'justify' keine Auswirkungen hat. Ich habe versucht, das JSFiddle zu besuchen, das du zur Verfügung gestellt hast, und es ist in Ordnung (von meinem iPhone). Jetzt habe ich Angst, ich vermisse etwas. Könnten Sie bitte irgendwelche Hinweise zu diesem Problem geben? – Joy

+0

@ShaojiangCai Bekanntmachung ', am Ende. Weitere Informationen finden Sie hier: http://stackoverflow.com/questions/11589590/text-align-justify-inline-block-elements-properly –