& nbsp jsx ne fonctionne pas

99

J'utilise la balise & nbsp dans jsx et cela ne rend pas l'espace. Ce qui suit est un petit extrait de mon code. Veuillez aider.

var Reporting=React.createClass({

  render: function(){
    return(
      <div style={divPositionReporting}>
          <p>Pricing Reports</p>
          <hr></hr>
          Select Scenario:&nbsp;&nbsp;
          <select>
            <option></option>
          </select>
          <button type="button">Get Pricing Report</button>
          <br/>
          Select Takeout Scenario:&nbsp;
          <select>
            <option></option>
          </select>
          <button type="button">Get Pricing Report</button>
          <br/>
      </div>
    );
  },

});
Indraneel Bende
la source
Avez-vous cherché? Premier coup: google.com/search?q=react+html+entities
Felix Kling
Je ne pense pas qu'il y ait quelque chose de mal avec votre code. Quelle version de Babel et React utilisent? Assurez-vous d'utiliser les dernières versions. Vous pouvez voir dans la réplique Babel que le code généré contient des espaces blancs insécables.
Felix Kling
Eh bien maintenant, le premier succès est celui-ci. :) duckduckgo.com/?q=jsx+nbsp
Marc Stober

Réponses:

202

Voir: JSX en profondeur

Essayer: Select Scenario:{'\u00A0'}

Ou: <div dangerouslySetInnerHTML={{__html: 'Select Scenario: &nbsp;'}} />

Ou: <div>&nbsp;</div>

jsfiddle

Mettre à jour

Après avoir lu certains des commentaires et essayé. Il est venu à mon attention que l'utilisation d'entités html à l'intérieur de JSX fonctionne bien (contrairement à ce qui est indiqué dans la référence jsx-gotchas ci-dessus [peut-être que c'est obsolète]).

Donc, utiliser quelque chose comme R&amp;D:, produirait: 'R&D'. Il y a un comportement étrange avec &nbsp;, qui le rend différemment, me faisant ainsi penser que cela ne fonctionne pas:

<div>This works simply:-&nbsp;-</div>
<div>This works simply:- {'\u00A0'}-</div>

Produit:

This works simply:- -
This works simply:-  -
omerts
la source
8
La réponse consiste donc à utiliser la valeur unicode correspondant à l'entité html et à l'utiliser dans une chaîne javascript. Merci de votre aide.
Indraneel Bende
@IndraneelBende &nbsp;devrait fonctionner correctement . Il y a un problème avec l'attribut value in style.
Gaurav Kumar
@Gaurav Kumar, j'ai aussi essayé de ne pas fonctionner, c'est juste ignoré. Pourriez-vous s'il vous plaît ajouter au violon dans ma réponse?
omerts le
1
<div>Doesn't work: -&nbsp;-</div>fonctionne très bien pour moi. edit: Eh bien, cela ne semble pas être un espace insécable.
Felix Kling
Mmh, produit la sortie attendue sur le site Web de React lui-même cependant ...
Felix Kling
17

Écrivez votre jsxcode enveloppé { }comme indiqué ci-dessous.

<h1>Code {' '}</h1>

Vous pouvez mettre un espace ou tout autre caractère spécial ici.

par exemple dans votre cas

Select Takeout Scenario:&nbsp;

devrait être comme ça

Select Takeout Scenario:{' '}

Ça va marcher.

Comme conseil, vous ne devriez pas utiliser &nbsppour ajouter de l'espace supplémentaire, vous pouvez utiliser css pour y parvenir.

WitVault
la source
2
C'est juste pour ajouter des espaces, mais ne fonctionnera pas pour d'autres entités html
omert le
5
Ce pas insécable espace bien.
TimoSolo
1
@TimoSolo Je ne vous encourage pas à utiliser & nbsp ou la technique mentionnée ci-dessus. Vous pouvez essayer la première réponse si la mienne ne fonctionne pas. Merci.
WitVault
"utiliser css pour obtenir la même chose" - Vous utilisez peut-être un espace insécable pour que votre texte ne descende pas à la ligne suivante et en dehors de la limite de l'élément qui contient le texte. Si vous souhaitez utiliser les propriétés CSS pour le faire à la place, une façon de le faire est text-overflow: "clip"; overflow: "hidden";. Il existe quelques variantes disponibles.
Dan Cron
16

{'\u00A0'}fonctionne mais est difficile à lire, donc je l'ai enveloppé dans un composant de fonction :

composants / nbsp.js:

export default () => '\u00A0';

usage:

Hello<Nbsp />world
Dmitry Pashkevich
la source
4

Si cela ne fonctionne pas pour vous, {' '}utilisez {'\u00A0'}.

{' '}rendra un espace mais il y a des cas où vous voulez que la hauteur de ligne soit également rendue dans le cas où vous voulez un espace à l'intérieur d'un élément HTML qui n'a pas d'autre texte, c'est-à-dire:, <span style={{ lineHeight: '1em' }}>{' '}</span>dans ce cas, vous devrez utiliser {'\u00A0'}à l'intérieur du span ou élément HTML.

Cory Robinson
la source
1

Essayez d'utiliser utf-8 nbsp, semble un espace simple, mais fonctionne bien sans code supplémentaire.

Vous devriez peut-être créer une variable pour cela.

Pour les symboles de copie: https://unicode-table.com/en/00A0/

Pour générer automatiquement des textes, utilisez un typograf.

unic
la source
0

Vous pouvez également utiliser des littéraux de modèle ES6, c'est-à-dire

`   <li></li>` or `  ${value}`
Hemadri Dasari
la source
Qu'est-ce que cette réponse a à voir avec les entités html?
boatcoder