BjRadio

Bouton radio React : chaque instance a une value obligatoire ; liez checked et onChange à un état partagé pour le groupe.

Utilisation

import { useState } from 'react'
import { BjRadio } from '@flrxnt/dsbj/react'

export default function Example() {
  const [plan, setPlan] = useState('basic')
  return (
    <>
      <BjRadio
        name="plan"
        value="basic"
        checked={plan === 'basic'}
        onChange={() => setPlan('basic')}
        label="Formule de base"
      />
      <BjRadio
        name="plan"
        value="pro"
        checked={plan === 'pro'}
        onChange={() => setPlan('pro')}
        label="Formule professionnelle"
        hint="Facturation annuelle"
      />
    </>
  )
}

Aperçu

Option désactivée

Une option peut être disabled dans le même name.

import { useState } from 'react'
import { BjRadio } from '@flrxnt/dsbj/react'

export default function Example() {
  const [tier, setTier] = useState('free')
  return (
    <>
      <BjRadio name="tier" value="free" checked={tier === 'free'} onChange={() => setTier('free')} label="Gratuit" />
      <BjRadio name="tier" value="pro" checked={tier === 'pro'} onChange={() => setTier('pro')} label="Pro" />
      <BjRadio name="tier" value="legacy" checked={tier === 'legacy'} onChange={() => setTier('legacy')} label="Legacy" disabled />
    </>
  )
}

Enfants comme libellé

children remplace label pour du contenu riche.

import { useState } from 'react'
import { BjRadio } from '@flrxnt/dsbj/react'

export default function Example() {
  const [v, setV] = useState('a')
  return (
    <BjRadio name="pick" value="a" checked={v === 'a'} onChange={() => setV('a')}>
      Option <em>A</em>
    </BjRadio>
  )
}

Groupe complet

Trois radios partageant name et un état unique.

Région
import { useState } from 'react'
import { BjRadio } from '@flrxnt/dsbj/react'

export default function Example() {
  const [region, setRegion] = useState('north')
  return (
    <fieldset>
      <legend class="bj-label">Région</legend>
      <BjRadio id="rad-n" name="region" value="north" checked={region === 'north'} onChange={() => setRegion('north')} label="Nord" />
      <BjRadio id="rad-s" name="region" value="south" checked={region === 'south'} onChange={() => setRegion('south')} label="Sud" hint="Bord maritime" />
      <BjRadio id="rad-c" name="region" value="center" checked={region === 'center'} onChange={() => setRegion('center')} label="Centre" />
    </fieldset>
  )
}

Contrôle et callbacks

checked selon la value choisie ; onChange met à jour l’état (value et name requis).

import { useState } from 'react'
import { BjRadio } from '@flrxnt/dsbj/react'

export default function Example() {
  const [plan, setPlan] = useState('basic')
  function pick(next: string) {
    setPlan(next)
  }
  return (
    <>
      <BjRadio name="plan" value="basic" checked={plan === 'basic'} onChange={() => pick('basic')} label="Basic" />
      <BjRadio name="plan" value="pro" checked={plan === 'pro'} onChange={() => pick('pro')} label="Pro" />
    </>
  )
}

Props

PropDescription
valueValeur de cette option (obligatoire).
checkedSi vrai, cette option est sélectionnée dans le groupe.
onChangeGestionnaire de changement ; mettez à jour l’état avec la value de l’option choisie.
labelTexte du libellé si aucun enfant n’est fourni.
hintTexte d’aide sous le libellé.
disabledDésactive ce radio.
nameAttribut name commun au groupe.
idIdentifiant du input ; sinon généré automatiquement.
childrenContenu du libellé ; remplace label si présent.
classNameClasse CSS sur l’élément label racine.
Autres attributs HTML natifs du input non couverts par les props du composant.