截至2019年4月4日,这似乎可以通过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。还有成百上千的其他唯一ID东西,但是uniqueId
带前缀的lodash 足以完成任务。
更新2019-07-10
感谢@Huong Hk为我指出了钩子惰性初始状态,其总和是您可以将一个函数传递给该函数,useState
该函数将仅在初始安装上运行。
// before
const [ id ] = useState(uniqueId('myprefix-'))
// after
const [ id ] = useState(() => uniqueId('myprefix-'))