Nach dem Stand vom 04.04.2019 scheint dies mit den React Hooks erreicht werden zu können 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
Soweit ich weiß, ignorieren Sie das zweite Array-Element in der Array-Destrukturierung, mit dem Sie aktualisieren können id, und jetzt haben Sie einen Wert, der während der gesamten Lebensdauer der Komponente nicht erneut aktualisiert wird.
Der Wert von idwird dort sein, myprefix-<n>wo <n>ein inkrementeller ganzzahliger Wert zurückgegeben wird uniqueId. Wenn das für Sie nicht einzigartig genug ist, sollten Sie überlegen, wie Sie es sich wünschen
function gen4() {
return Math.random().toString(16).slice(-4)
}
function simpleUniqueId(prefix) {
return (prefix || '').concat([
gen4(),
gen4(),
gen4(),
gen4(),
gen4(),
gen4(),
gen4(),
gen4()
].join(''))
}
oder sehen Sie sich die Bibliothek an, die ich hier veröffentlicht habe: https://github.com/rpearce/simple-uniqueid . Es gibt auch Hunderte oder Tausende anderer eindeutiger ID-Dinge, aber Lodashs uniqueIdmit einem Präfix sollten ausreichen, um die Arbeit zu erledigen.
Update 2019-07-10
Vielen Dank an @Huong Hk, der mich auf den faulen Anfangszustand von Hooks hingewiesen hat Die Summe davon ist, dass Sie eine Funktion übergeben können useState, die nur auf dem anfänglichen Mount ausgeführt wird.
// before
const [ id ] = useState(uniqueId('myprefix-'))
// after
const [ id ] = useState(() => uniqueId('myprefix-'))