reactjs - 在 React select 中使用枚举
问题描述
我想使用以下枚举在 React 中显示一个下拉列表。这个想法是防止在我的<select>
. 键应限制为Stooges.larry
,Stooges.curly
和Stooges.moe
:
const Stooges = {
larry: "Larry Fine",
curly: "Curly Howard",
moe: "Moe Howard"
};
这是我选择的代码,效果很好:
<select value={stooge} onChange={handleChange}>
{Object.keys(Stooges).map(key => (
<option key={key} value={key}>
{Stooges[key]}
</option>
))}
</select>
当我尝试设置下拉列表的初始值时,问题就出现了——我必须使用硬编码键:
const [stooge, setStooge] = React.useState('larry');
我可以通过选择第一个键来缓和这一点:
const keys = Object.keys(Stooges);
const [stooge, setStooge] = React.useState(keys[0]);
但是,这仍然感觉不对。我不知道key[0]
我在选谁。
有没有更好的方法来处理这个用例中的枚举?我在 TypeScript 中尝试过字符串枚举,但它们有同样的问题:
enum Stooges {
larry = "Larry Fine",
curly = "Curly Howard",
moe = "Moe Howard"
}
请在此处查看我的 CodeSandbox 。
解决方案
由于缺乏更好的解决方案,我采取了以下方法。我至少能够按名称选择正确的枚举Stooges.larry.id
::
const Stooges = {
larry: {
id: "larry",
name: "Larry Fine"
},
curly: {
id: "curly",
name: "Curly Howard"
},
moe: {
id: "moe",
name: "Moe Howard"
}
};
function App() {
const [stooge, setStooge] = React.useState(Stooges.larry.id);
const handleChange = (event: React.ChangeEvent<HTMLSelectElement>) => {
setStooge(event.target.value);
};
return (
<div className="App">
<select value={stooge} onChange={handleChange}>
{Object.keys(Stooges).map(key => (
<option key={key} value={key}>
{Stooges[key].name}
</option>
))}
</select>
</div>
);
}
这是新的 CodeSandbox:https ://codesandbox.io/embed/wqj2q94o2k
推荐阅读
- powershell - PowerShell - 在断开连接的会话上显示源计算机
- python - Tensorflow:使用 tf.function 可能的张量列表?
- python - 在python中用单引号初始化一个元组
- python - 在 git 操作中找不到 pylint
- python - XGBoostError:[10:10:03] /workspace/src/tree/updater_gpu_hist.cu:1407:gpu_hist 中的异常:NCCL 失败
- r - 带有占位符的 dbExecute 不能在 RSQLite 中可靠地工作
- javascript - Angular - 在组件的新选项卡中打开链接?
- python - 如何使用 Python 子进程从 SVN 命令行获得正确的 unicode 答案?
- javascript - 为什么Error对象可以打印纯字符串消息
- unity3d - 为什么检查器中的着色器名称与文件名称不同?