Theo sau kể từ 2019-04-04, điều này dường như có thể được thực hiện với React Hook ' 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
Theo tôi hiểu, bạn bỏ qua mục mảng thứ hai trong việc hủy mảng sẽ cho phép bạn cập nhật id
và bây giờ bạn đã có một giá trị sẽ không được cập nhật lại cho vòng đời của thành phần.
Giá trị của id
sẽ là myprefix-<n>
nơi <n>
giá trị nguyên tăng dần được trả về uniqueId
. Nếu điều đó không đủ độc đáo cho bạn, hãy cân nhắc việc tự làm
function gen4() {
return Math.random().toString(16).slice(-4)
}
function simpleUniqueId(prefix) {
return (prefix || '').concat([
gen4(),
gen4(),
gen4(),
gen4(),
gen4(),
gen4(),
gen4(),
gen4()
].join(''))
}
hoặc kiểm tra thư viện tôi đã xuất bản với điều này tại đây: https://github.com/rpearce/simple-uniqueid . Ngoài ra còn có hàng trăm hoặc hàng ngàn thứ ID duy nhất khác ngoài đó, nhưng những từ uniqueId
có tiền tố là đủ để hoàn thành công việc.
Cập nhật 2019-07-10
Cảm ơn @Huong Hk đã chỉ cho tôi móc trạng thái ban đầu lười biếng , tổng số đó là bạn có thể truyền một hàm cho useState
nó sẽ chỉ được chạy trên mount ban đầu.
// before
const [ id ] = useState(uniqueId('myprefix-'))
// after
const [ id ] = useState(() => uniqueId('myprefix-'))