为了生成唯一id,React18专门引入了新Hook:useId
作者:卡颂
简介:《React技术揭秘》作者
来源:SegmentFault 思否社区
// App.tsx
const id = Math.random();
export default function App() {
return <div id={id}>Hello</div>
}
React在服务端渲染,生成随机id(假设为0.1234),这一步叫dehydrate(脱水)
<div id="0.12345">Hello</div>作为HTML传递给客户端,作为首屏内容
React在客户端渲染,生成随机id(假设为0.6789),这一步叫hydrate(注水)
function Checkbox() {
// 生成唯一、稳定id
const id = useId();
return (
<>
<label htmlFor={id}>Do you like React?</label>
<input type="checkbox" name="react" id={id} />
</>
);
);
React18来了,一切都变了
// 全局通用的计数变量
let globalIdIndex = 0;
export default function App() {
const id = useState(() => globalIdIndex++);
return <div id={id}>Hello</div>
}
useId的原理
function B() {
// id为"2-1"
const id = useId();
return <div id={id}>B</div>;
}
1. 同一个组件使用多个id
function B() {
const id0 = useId();
const id1 = useId();
return (
<ul>
<li id={id0}></li>
<li id={id1}></li>
</ul>
);
}
2. 要跳过没有使用useId的组件
const a = 18;
// "10010" length 5
a.toString(2)
// "i" length 1
a.toString(32)
总结
评论