По состоянию на 04.04.2019, похоже, это можно сделать с помощью 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
Насколько я понимаю, вы игнорируете второй элемент массива в деструктурировании массива, который позволяет вам обновляться id
, и теперь у вас есть значение, которое не будет обновляться снова в течение срока службы компонента.
Значение id
будет myprefix-<n>
где <n>
- возвращаемое целочисленное значение uniqueId
. Если это недостаточно для вас, подумайте о создании своего собственного лайка.
function gen4() {
return Math.random().toString(16).slice(-4)
}
function simpleUniqueId(prefix) {
return (prefix || '').concat([
gen4(),
gen4(),
gen4(),
gen4(),
gen4(),
gen4(),
gen4(),
gen4()
].join(''))
}
или просмотрите опубликованную мной библиотеку здесь: https://github.com/rpearce/simple-uniqueid . Существуют также сотни или тысячи других уникальных идентификаторов, но lodash uniqueId
с префиксом должно быть достаточно для выполнения работы.
Обновление 2019-07-10
Спасибо @Huong Hk за указание на ленивое начальное состояние хуков , сумма которого состоит в том, что вы можете передать функцию, useState
которая будет запускаться только при начальном монтировании.
// before
const [ id ] = useState(uniqueId('myprefix-'))
// after
const [ id ] = useState(() => uniqueId('myprefix-'))