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 id
akan 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 uniqueId
dengan 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 useState
yang hanya akan dijalankan pada pemasangan awal.
// before
const [ id ] = useState(uniqueId('myprefix-'))
// after
const [ id ] = useState(() => uniqueId('myprefix-'))