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
私が理解しているように、更新を可能にする配列の構造化解除の2番目の配列項目を無視する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-'))