reactjs - 在react redux中循环对象
问题描述
我在 modalProps.rows 中有一个对象,如下所示:
我需要用它建立一个选择菜单。这就是我所做的
<Select name="replace_id" onChange={handleActivityAreaChange}>
{console.log(modalProps.rows)}
{Object.keys(modalProps.rows).map(({ id, name }, index) =>
<option key={index}
value={id}>
{name}
</option>
)}
</Select>
以上没有给我任何错误,但下拉列表仍然为空。我错过了什么?
在玩了一会儿之后,这就是我所做的
const options = []
Object.keys(modalProps.rows).forEach(key => {
options.push({value: modalProps.rows[key].id, label: modalProps.rows[key].name});
});
const renderActivityAreaList = () => (
<Flex width="100%">
{t('entities.activityAreas.used')}
<Select name="replace_id" options={options} onChange={handleActivityAreaChange} />
</Flex>
)
以上工作按预期工作......但我仍然希望我能理解我之前的尝试有什么问题。
解决方案
您应该使用Object.values来检索您的对象数据:
<Select name="replace_id" onChange={handleActivityAreaChange}>
{console.log(modalProps.rows)}
{Object.values(modalProps.rows).map(({ id, name }) =>
<option key={id}
value={id}>
{name}
</option>
)}
</Select>
注意:更喜欢将您的 id 作为键而不是数组的索引传递
更新
鉴于您的实现,它可能与 Select 期望接收的组件有关。如果你喜欢:
const options = Object.values(modalProps.rows).map(({ id, name }) => ({ value: id, label: name }))
const renderActivityAreaList = () => (
<Flex width="100%">
{t('entities.activityAreas.used')}
<Select name="replace_id" options={options} onChange={handleActivityAreaChange} />
</Flex>
)
你很可能会面临同样的结果
推荐阅读
- c# - 为什么 dfrgui exe 在 x86 目标平台上不起作用
- php - PHP文件在使用变量时给出错误
- javascript - 怎么可能将参数传递给另一个同名的内部函数?
- vue.js - VueJS - 单击时如何突出显示选定的按钮
- python - Python sqlite3如何在“质量”列中提取100行然后更改它们的值
- javascript - 在 react-native-geolocation-service 中使用 Promise 从另一个文件获取位置
- crashpad - 如何从小型转储文件中获取崩溃的进程 ID
- c# - 授予 .NET 应用程序管理员权限
- javascript - 如何在ngrx效果中制作嵌套的bitbucket API http请求
- c++ - 在创建 pdf 文件期间处理 HPDF_FAILD_TO_ALLOC_MEM