No seguimento de 04-04-2019, isso parece ser possível com o 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
Pelo que entendi, você ignora o segundo item da matriz na desestruturação da matriz que permitiria a atualização ide agora você tem um valor que não será atualizado novamente durante a vida útil do componente.
O valor de idserá myprefix-<n>onde <n>é um valor inteiro incremental retornado uniqueId. Se isso não for único o suficiente para você, considere fazer o seu próprio
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 confira a biblioteca que publiquei aqui: https://github.com/rpearce/simple-uniqueid . Existem também centenas ou milhares de outras coisas únicas de identificação por aí, mas os lodashs uniqueIdcom um prefixo devem ser suficientes para fazer o trabalho.
Atualização 2019-07-10
Agradeço ao @Huong Hk por me indicar um estado inicial lento , cuja soma é que você pode passar uma função para useStateque só seja executada na montagem inicial.
// before
const [ id ] = useState(uniqueId('myprefix-'))
// after
const [ id ] = useState(() => uniqueId('myprefix-'))