javascript - 道具不匹配服务器/客户端,如何生成持久的唯一ID?
问题描述
我将 ReactJS.net 与服务器渲染一起使用。我想制作一个简单的组件,它输出一个标签和一个输入,其中标签通过 htmlFor 属性引用输入。由于该组件可以在同一页面上多次使用,因此我需要它为该组件的每个实例提供一个唯一 ID。
因此,我在构造函数中生成了一个 guid 并使用它——除了在服务器端和客户端都生成 ID 之外,它工作正常,这会导致值不匹配。
我该如何解决这种不匹配?
示例代码:
interface IProps { whatever:string }
export default class Test extends React.Component<IProps> {
private _guid: string;
constructor(props: IProps) {
super(props);
this._guid = Utils.getGuid(); // generates a new guid
}
render(): JSX.Element {
return (
<div>
<label htmlFor={this._guid}A nice label</label>
<input id={this._guid} type="text" />
</div>
);
}
}
代码将运行并工作,但会生成警告:
警告:道具htmlFor
不匹配。服务器:“87d61dbe-b2a8-47bd-b299-c6e80445f626” 客户端:“f0297b42-7781-48a4-9904-75b8fd2d1140”
解决方案
您必须根据传递给组件的道具构建一个 ID - 在这种情况下,您可以使用whatever
字符串创建哈希码。
推荐阅读
- vba - 刷新查询表 VBA
- flutter - Flutter 框架中使用的键是什么?
- angularjs - ng-repeat 在单独的列中显示输出
- file-upload - CAMEL HTTP4 post 请求被拒绝,因为没有找到多部分边界
- git - 输入“状态”时,是否有 git 扩展或设置在名称旁边列出具有相应数字的文件
- batch-file - 批处理变量不包含任何内容?
- python-2.7 - pygame如何从char获取key_event
- python - 在python中求解一个简单的符号方程
- git - 如何在不使用终端的情况下更改现有 git 提交的作者?
- browser - 加载 Jupyter / iPython Notebook 时浏览器冻结或需要很长时间才能打开