Suite à partir du 04/04/2019, cela semble pouvoir être accompli avec les React Hooks useState
:
import React, { useState } from 'react'
import uniqueId from 'lodash/utility/uniqueId'
const Field = props => {
const [ id ] = useState(uniqueId('myprefix-'))
return (
<div>
<label htmlFor={id}>{props.label}</label>
<input id={id} type="text"/>
</div>
)
}
export default Field
Si je comprends bien, vous ignorez le deuxième élément du tableau dans la déstructuration du tableau qui vous permettrait de mettre à jour id
, et vous avez maintenant une valeur qui ne sera pas mise à jour à nouveau pendant la durée de vie du composant.
La valeur de id
sera myprefix-<n>
où <n>
est une valeur entière incrémentielle renvoyée uniqueId
. Si ce n'est pas assez unique pour vous, pensez à créer le vôtre
function gen4() {
return Math.random().toString(16).slice(-4)
}
function simpleUniqueId(prefix) {
return (prefix || '').concat([
gen4(),
gen4(),
gen4(),
gen4(),
gen4(),
gen4(),
gen4(),
gen4()
].join(''))
}
ou consultez la bibliothèque que j'ai publiée avec ceci ici: https://github.com/rpearce/simple-uniqueid . Il existe également des centaines ou des milliers d'autres éléments d'identification uniques, mais les lodash uniqueId
avec un préfixe devraient suffire pour faire le travail.
Mise à jour 10/07/2019
Merci à @Huong Hk de m'avoir pointé vers l'état initial paresseux des hooks , dont la somme est que vous pouvez passer une fonction à useState
qui ne sera exécutée que sur le montage initial.
// before
const [ id ] = useState(uniqueId('myprefix-'))
// after
const [ id ] = useState(() => uniqueId('myprefix-'))