Po 04.04.2019 wydaje się, że można to osiągnąć za pomocą haków React 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
Jak rozumiem, ignorujesz drugi element tablicy w procesie destrukturyzacji tablicy, który pozwoliłby na aktualizację id, a teraz masz wartość, która nie zostanie ponownie zaktualizowana przez cały okres użytkowania komponentu.
Wartość idwill to myprefix-<n>gdzie <n>jest zwracana przyrostowa wartość całkowita uniqueId. Jeśli to nie jest dla Ciebie wystarczająco wyjątkowe, rozważ stworzenie własnego lajka
function gen4() {
return Math.random().toString(16).slice(-4)
}
function simpleUniqueId(prefix) {
return (prefix || '').concat([
gen4(),
gen4(),
gen4(),
gen4(),
gen4(),
gen4(),
gen4(),
gen4()
].join(''))
}
lub sprawdź bibliotekę, którą opublikowałem wraz z tym tutaj: https://github.com/rpearce/simple-uniqueid . Istnieją również setki lub tysiące innych unikalnych identyfikatorów, ale lodash uniqueIdz prefiksem powinien wystarczyć, aby wykonać zadanie.
Aktualizacja 2019-07-10
Dzięki @Huong Hk za wskazanie mi leniwego stanu początkowego hooków , którego sumą jest to, że możesz przekazać funkcję, useStatektóra zostanie uruchomiona tylko na początkowym montowaniu.
// before
const [ id ] = useState(uniqueId('myprefix-'))
// after
const [ id ] = useState(() => uniqueId('myprefix-'))