我有带有label
s的表单元素,我希望有唯一的ID将label
s链接到带有htmlFor
属性的元素。大概是这样的:
React.createClass({
render() {
const id = ???;
return (
<label htmlFor={id}>My label</label>
<input id={id} type="text"/>
);
}
});
我以前是根据这个来生成ID的。_rootNodeID
,但自从React 0.13之后就不可用了。现在最好和/或最简单的方法是什么?
从2019年4月4日起,这似乎可以通过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-
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.还有数百或数千个其他独特的身份信息,但是有前缀的洛蒂什的
uniqueId
应该足以完成这项工作。
感谢@Huong Hk为我指出初始状态,其总和是您可以将函数传递到
useState
,该函数将仅在初始装载时运行。
// before
const [ id ] = useState(uniqueId('myprefix-'))
// after
const [ id ] = useState(() => uniqueId('myprefix-'))
这个解决方案对我来说很好。
utils/newid.js
:
let lastId = 0;
export default function(prefix='id') {
lastId++;
return `${prefix}${lastId}`;
}
我可以这样使用它:
import newId from '../utils/newid';
React.createClass({
componentWillMount() {
this.id = newId();
},
render() {
return (
<label htmlFor={this.id}>My label</label>
<input id={this.id} type="text"/>
);
}
});
但它在同构应用程序中不起作用。
2015年8月17日增补。您可以使用lodash中的uniqueId,而不是自定义newId函数。
2016年1月28日更新。最好在组件willmount
中生成ID。
id应该放在
组件将安装
(2018年更新)构造函数
,而非渲染
。将其放入render
将不必要地重新生成新ID。
如果使用下划线或lodash,则会有一个uniqueId
函数,因此生成的代码应该类似于:
constructor(props) {
super(props);
this.id = _.uniqueId("prefix-");
}
render() {
const id = this.id;
return (
<div>
<input id={id} type="checkbox" />
<label htmlFor={id}>label</label>
</div>
);
}
2019年更新:
import React, { useState } from 'react';
import _uniqueId from 'lodash/uniqueId';
const MyComponent = (props) => {
// id will be set once when the component initially renders, but never again
// (unless you assigned and called the second argument of the tuple)
const [id] = useState(_uniqueId('prefix-'));
return (
<div>
<input id={id} type="checkbox" />
<label htmlFor={id}>label</label>
</div>
);
}
问题内容: 我有带有s的表单元素,并且我希望有唯一的ID将s 链接到具有attribute的元素。像这样: 我曾经根据生成ID,但自从React 0.13起就不可用了。现在最好和/或最简单的方法是什么? 问题答案: 这个解决方案对我来说很好。 : 我可以这样使用它: 但它在同构应用程序中不起作用。 添加17.08.2015 。相反,自定义NEWID的功能,您可以使用UNIQUEID从lodash。
问题内容: 我正在使用PHP和MySQL编写脚本,并且想要获得一个唯一的ID(由字符串组成:大写字母和带数字的小写字母),例如:。我在PHP中发现了许多可以生成此类数字的函数,但我担心如何确保id唯一! 更新 :uuid很长,我的意思是这样的ID:(P5Dc)一个11个字母数字的字符。 问题答案: 一个 编程的方式 可以是: 在字段中添加一个唯一索引 在PHP中生成随机字符串 在PHP中循环(wh
我试图找到一种算法,为我正在编写的图表引擎生成Y轴,并且处于拔毛阶段。 四处搜索会产生各种解决方案,但我很难找到一个适合所有数据范围的解决方案。 这是我到目前为止得到的: 这给了我一个新的范围,我想为它生成一个Y轴。 我计算每个YAxis标签之间的距离,如下所示: 我还尝试使用更简单的算法计算滴答声: 前一种方法适用于小范围,例如23- 在0的情况下- 我通过循环labelCount(在我的例子中
关于在CodeIgniter中启用表单验证的规则,我有一个问题。 在另一种解释(链接)中,它们不包括标准用法 我需要使用规则我的字段。 我应该如何使该函数在我的模型文件上工作以启动?因为在文档中,我没有看到关于启用规则的解释。 我目前的代码仍然使用手动匹配数据,但我需要知道如何使用这个规则 美元这个-
问题内容: 如何生成不猜测下一个数字的java中的整数的唯一ID? 问题答案: 它需要有多独特? 如果它仅在流程中唯一,则可以在每次需要新值时使用和调用。
注意:Dreamweaver CC 和更高版本的用户界面已简化。因此,您可能在 Dreamweaver CC 和更高版本中找不到本文中描述的一些选项。有关详细信息,请参阅此文章。 当访问者在 Web 浏览器中显示的 Web 表单中输入信息,然后单击提交按钮时,这些信息将被发送到服务器,服务器中的服务器端脚本或应用程序会对这些信息进行处理。服务器向用户(或客户端)发回所处理的信息或基于该表单内容执行