A partir del 04/04/2019, esto parece lograrse con los ganchos de reacción 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
Según tengo entendido, ignora el segundo elemento de la matriz en la desestructuración de la matriz que le permitiría actualizar id
, y ahora tiene un valor que no se actualizará nuevamente durante la vida útil del componente.
El valor de id
será myprefix-<n>
donde <n>
es un valor entero incremental devuelto desde uniqueId
. Si eso no es lo suficientemente exclusivo para ti, considera hacer tu propio me gusta
function gen4() {
return Math.random().toString(16).slice(-4)
}
function simpleUniqueId(prefix) {
return (prefix || '').concat([
gen4(),
gen4(),
gen4(),
gen4(),
gen4(),
gen4(),
gen4(),
gen4()
].join(''))
}
o echa un vistazo a la biblioteca que publiqué aquí: https://github.com/rpearce/simple-uniqueid . También hay cientos o miles de otras cosas de identificación únicas, pero lodash uniqueId
con un prefijo debería ser suficiente para hacer el trabajo.
Actualizar 2019-07-10
Gracias a @Huong Hk por señalarme al estado inicial lento de los ganchos , cuya suma es que puedes pasarle una función useState
que solo se ejecutará en el montaje inicial.
// before
const [ id ] = useState(uniqueId('myprefix-'))
// after
const [ id ] = useState(() => uniqueId('myprefix-'))