Réagir Sélectionnez auto, largeur
Lors de l'utilisation de react-select
il n'est pas de redimensionnement automatique par la valeur de l'option, mais à l'aide de width:100%
comme vous pouvez le voir sur l'image:
Options sont courts:
getOptions() {
return [
{ value: 'AND', label: 'AND' },
{ value: 'OR', label: 'OR' }
]
}
Et code produit:
<Select
options={this.getOptions()}
value={value}
autosize={true}
clearable={false}
simpleValue
/>
Est-il possible de faire react-select
pour montrer ces valeurs avec ajustement automatique de la taille, afin de sélectionner la zone serait le même que l'option de la longueur, et je pourrais, par exemple, le centre de cette zone de sélection dans <div>
?
Mis à jour 14.11.2017
Exemple complet peut être vu dans cette jsFiddle
Vous devez vous connecter pour publier un commentaire.
SOLUTION 1
Vous pouvez tirer parti de Réagir de
inline styles
en mettant à jour les composantswidth
en fonction de la durée de l'option sélectionnée.Laissez-moi vous expliquer plus loin: Dire la valeur sélectionnée est
HelloWorld
. Cette chaîne est de longueur10
. Nous pourrions supposer que chaque caractère comptes pour dire8px
chacun en moyenne (total suppose que je n'ai aucune idée). Ainsi, la largeur de ce mot est autour de8*10=80px
, droit ? Aussi, il y a quelques contrôles après le mot (la carret et la croix) et nous avons besoin d'un minimum de rembourrage: ensemble, ils peuvent être de100px
largeur. Alors là vous l'avez: votre div de largeur doit être( 8px * 10 letters ) + 100px = 180px
.Plus précisément, la formule correcte est quelque chose comme:
Quand
selected_value
des modifications de seslength
, et par conséquent la largeur de la div est mis à jour avec le nouveau total.Exemple: si la valeur sélectionnée est maintenant
Lorem Ipsum dolor sit amet
, la longueur est maintenant26
. En appliquant la formule, nous obtenons une plus grande largeur de :(8px * 26 letters) + 100px = 308px
.Pour que cela fonctionne à réagir, voici un extrait:
Comme vous pouvez le voir, j'ai ajouté :
à votre composant. Chaque fois que l'état est mise à jour, tout est multiplié, y compris la largeur de l'élément.
Voir un exemple dans ce violon.
Par la suite, vous souhaitez affiner les règles et les moyennes à vos besoins. Je vous conseille aussi d'appliquer une lettre de la taille en fonction du nombre de lettres majuscules et minuscules dans la valeur sélectionnée.
SOLUTION 2 (edit)
Je suis venu avec un pur CSS solution si vous le souhaitez. Il devrait être mieux testé contre votre conception, mais cela devrait fonctionner:
Voir un violon (j'ai changé quelques exemples pour mieux illustrer)
Dites-moi ce que vous en pensez. 🙂
min-width
est égale à la plus grande disponible en option.Select...
d'abord, puis de l'étendre à la plus longue option est disponible uniquement lorsque la liste déroulante est ouverte? ou peut-être vous voulez toujours être au moins de la taille de la plus longue option? ou peut-être vous voulez avoir une largeur moyenne et de couper vers le bas les options étant de plus de 200px ? Ou vous pouvez aussi avoir besoin seulement le menu déroulant afin d'élargir au delà... tout Cela vous pouvez le faire par le mélange des deux solutions.react-input-autosize
bibliothèque dans votre jsFiddle?Styles en ligne ne fonctionne pas pour moi.
Je vient de terminer l'Sélectionner un composant dans un div et a donné à la div de la largeur que je voulais.