A partire dal 04-04-2019, questo sembra poter essere realizzato con i 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
A quanto ho capito, ignori il secondo elemento dell'array nella distruzione dell'array che ti consentirebbe l'aggiornamento id
, e ora hai un valore che non verrà aggiornato di nuovo per la vita del componente.
Il valore di id
sarà myprefix-<n>
dove <n>
è un valore intero incrementale restituito uniqueId
. Se non è abbastanza unico per te, prendi in considerazione l'idea di crearne uno tuo
function gen4() {
return Math.random().toString(16).slice(-4)
}
function simpleUniqueId(prefix) {
return (prefix || '').concat([
gen4(),
gen4(),
gen4(),
gen4(),
gen4(),
gen4(),
gen4(),
gen4()
].join(''))
}
oppure dai un'occhiata alla libreria che ho pubblicato qui: https://github.com/rpearce/simple-uniqueid . Ci sono anche centinaia o migliaia di altri ID univoci là fuori, ma lodash uniqueId
con un prefisso dovrebbe essere sufficiente per portare a termine il lavoro.
Aggiornamento del 10-07-2019
Grazie a @Huong Hk per avermi indicato lo stato iniziale pigro degli hook , la cui somma è che è possibile passare una funzione useState
che verrà eseguita solo sul mount iniziale.
// before
const [ id ] = useState(uniqueId('myprefix-'))
// after
const [ id ] = useState(() => uniqueId('myprefix-'))