javascript - 尝试使用字典查找在选择下拉列表中动态映射选项
问题描述
我有一个反应组件,其中包括一个键/值对字典,表示键的美国州缩写及其全名作为值,例如:
const states = {
AL: "Alabama",
AK: "Alaska",
AZ: "Arizona",
AR: "Arkansas",
CA: "California"
}
我还有一个 API 响应,它将 astate
作为嵌套address
对象的一部分作为缩写发回。所以对于加利福尼亚,API 返回CA
我正在尝试检查针对我的对象的 API 响应,并仅将与字典中的内容匹配的美国州动态映射到选择下拉列表中的选项,但我收到错误说明Expected an assignment or function call and instead saw an expression
我的初始函数。
我在下面包含了字典查找功能以及我的组件。
Dictionary lookup - causing the errors
const activeStates = props.locations.map(x => {abbr: x.address.state; name: states[x.address.state]});
React Component with select dropdown
<select>
<option>
{Object.entries(activeStates).map((name, abbreviation) => <option key={abbreviation} value={abbreviation}>{name}
</option>
</select>
解决方案
因为您在{
之后有一个=>
,所以您的箭头函数使用FunctionBody形式,并且 the{
和结尾}
是函数的块,而不是对象文字。所以你在函数中有如下代码:
abbr: x.address.state; name: states[x.address.state]
(我有点惊讶你会收到一个错误;对我来说,它看起来像是使用标签的有效代码,但是......或者错误可能来自下面引用的代码块。)
如果你想使用简洁的形式,把()
对象文字放在周围:
const activeStates = props.locations.map(x => ({abbr: x.address.state; name: states[x.address.state]}));
// −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−^−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−^
您的第二个代码块中还有几个拼写错误,您不必)
结束map
调用的参数列表,也不必}
结束 JSX 表达式。修复那些:
<select>
<option>
{Object.entries(activeStates).map((name, abbreviation) => <option key={abbreviation} value={abbreviation}>{name}
</option>))}
</select>
但是,Object.entries
给你一个数组[key, value]
数组,所以你的参数列表map
应该使用解构而不是两个参数(我也可能避免让它太长,但这是风格问题),它们会相反命令:
<select>
<option>
{Object.entries(activeStates).map(([abbreviation, name]) => (
<option key={abbreviation} value={abbreviation}>{name}</option>
))}
</select>
推荐阅读
- mysql - 使用 brew mysql.server 安装 mysql@5.6 不是命令
- python - Python Selenium 选择带空格的 div 类
- javascript - Cheerio each() 函数行为异常
- java - Java 嵌套 for 循环(内部 for 循环中带有 if 语句)
- reactjs - React Native:如何将变量放入 require 而不给我一个错误
- javascript - 自动将“/”添加到日期的 Javascript 输入
- amazon-cognito - Congito 用户池的新注册默认为禁用
- javascript - 为演示目的创建站点的副本/会话
- python-3.x - 元组列表中的反转数字
- sqlite - 我们如何在 sqlite 数据库(表)中插入图像?