Menindaklanjuti 2019-04-04, ini tampaknya dapat dicapai dengan 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
Seperti yang saya pahami, Anda mengabaikan item larik kedua dalam pengrusakan larik yang memungkinkan Anda memperbarui id, dan sekarang Anda memiliki nilai yang tidak akan diperbarui lagi selama masa pakai komponen.
Nilai dari idakan menjadi di myprefix-<n>mana <n>nilai integer tambahan yang dikembalikan uniqueId. Jika itu tidak cukup unik untuk Anda, pertimbangkan untuk membuat suka sendiri
function gen4() {
return Math.random().toString(16).slice(-4)
}
function simpleUniqueId(prefix) {
return (prefix || '').concat([
gen4(),
gen4(),
gen4(),
gen4(),
gen4(),
gen4(),
gen4(),
gen4()
].join(''))
}
atau lihat perpustakaan yang saya terbitkan dengan ini di sini: https://github.com/rpearce/simple-uniqueid . Ada juga ratusan atau ribuan ID unik lainnya di luar sana, tetapi lodash uniqueIddengan awalan sudah cukup untuk menyelesaikan pekerjaan.
Perbarui 2019-07-10
Terima kasih kepada @Huong Hk karena telah mengarahkan saya ke status awal malas hooks , yang jumlahnya adalah Anda dapat meneruskan fungsi useStateyang hanya akan dijalankan pada pemasangan awal.
// before
const [ id ] = useState(uniqueId('myprefix-'))
// after
const [ id ] = useState(() => uniqueId('myprefix-'))