javascript - 从字符串元素数组创建 DOM 元素,然后将结果加入 render()

标签 javascript arrays reactjs ecmascript-6

“keyCombo”对象数组定义如下所示,目的是在 React 组件的 render 方法中将数据呈现为样式行:

let items = [{"keyCombo": ["⌘","0"]}, {"keyCombo": ["⌘","Ctrl", "1"]}]

tokbd = (keyCombo) => {
  let styledKeys = keyCombo.map(key => <kbd>{key}</kbd>)
  return <span>{styledKeys.join(" + ")}</span>
}

render() {
  return(
    <div>
      {items.map(item => <span>{this.tokbd(item.keyCombo)}</span>)}
    </div>
  )
}      

我想得到:

expected result

但相反,我得到了

[对象对象] + [对象对象](和)
[对象对象] + [对象对象] + [对象对象]

如何将 keyCombo 数组中的字符组合成:

“(样式元素)+(样式元素)+(样式元素)”

而不是:

“样式化(元素+元素+元素)”

甚至 + 字符也被无意中设置了样式?

最佳答案

join() 方法将一个数组(或类数组对象)的所有元素连接成一个字符串并返回该字符串。 MDN这就是您获得 [object Object] 的原因。

您可以尝试使用不带第二个参数的 reduce 来代替:

  tokbd = (keyCombo) => {
      let styledKeys = keyCombo.map(key => <kbd>{key}</kbd>).reduce((prev, curr) => [prev, ' + ', curr])

      return <span>{styledKeys}</span>
    }

codesandbox

关于javascript - 从字符串元素数组创建 DOM 元素,然后将结果加入 render(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47046818/

相关文章:

javascript - 当用户参加测验时,如何停止使用 javascript 或 jquery 打开其他浏览器或选项卡?

javascript - 如何在窗口调整大小时重置元素的最大高度

arrays - array_upper 和 array_length 之间有什么功能上的区别吗?

arrays - 是否有用于eclipse的插件在调试时检查2D数组?

javascript - React应用程序中自动脚本将js转换为jsx

javascript - 如何在每个循环 Handlebars js中添加另一个值

javascript - 只为一个参数 stub 函数

javascript - 如何将数组拆分为两个子集并使数组的子值之和尽可能相等

javascript - 未捕获的类型错误 : Cannot read property 'fetch' of undefined

javascript - 预检响应在 axios 中没有 HTTP ok 状态