ติดตามตั้งแต่วันที่ 2019-04-04 ดูเหมือนว่าจะสามารถทำได้ด้วย 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 ที่เป็นเอกลักษณ์อื่น ๆ อีกหลายร้อยหรือหลายพันรายการ แต่ lodash ที่uniqueId
มีคำนำหน้าก็น่าจะเพียงพอที่จะทำงานให้ลุล่วง
อัปเดต 2019-07-10
ขอบคุณ @Huong Hk ที่ชี้ให้ฉันเห็นสถานะเริ่มต้นที่ขี้เกียจผลรวมคือคุณสามารถส่งผ่านฟังก์ชั่นไปuseState
ที่จะทำงานบนการเมานต์เริ่มต้นเท่านั้น
// before
const [ id ] = useState(uniqueId('myprefix-'))
// after
const [ id ] = useState(() => uniqueId('myprefix-'))