【问题标题】:Join JSX with JSX [duplicate]使用 JSX 加入 JSX [重复]
【发布时间】:2017-12-11 01:58:57
【问题描述】:

我遇到了一种情况,我有几个标签,它们之间有分隔箭头 - 有点像面包屑。

最后一个标签后面没有箭头。

这对于.join() 来说似乎是一个完美的情况,例如:

[1,2,3,4].join('->');  // "1->2->3->4"

但是,标签是 JSX,连接分隔符也是 JSX。

由于.join() 需要一个字符串分隔符并将数组元素转换为字符串,所以它最终是这样的:

[<div />, <div />].join(<hr />); // "[object Object][object Object][object Object]"

我已经探索了otheranswers 中详述的.reduce() 解决方案,但它似乎也不太正确。有人有什么建议吗?

【问题讨论】:

  • 你能把 JSX 字符串化然后加入吗?查看react-dom-server renderToString。它从组件返回生成的 html。
  • “但它似乎也不太正常” 有什么问题? React 元素不是字符串,所以你当然不能.join 他们。
  • 是的,这就是问题的本质:p

标签: javascript reactjs jsx


【解决方案1】:

这是一个很好的方法,你可以用 reduce 来解决它:

React.createClass({
  render() {
     <div>
        this.props.data
        .map(t => <div/>)
        .reduce((accu, elem) => {
            return accu === null ? [elem] : [...accu, <hr />, elem]
        }, null)
     </div>
  }
})

【讨论】:

  • hr中删除' '
  • 现在太好了,+1
  • FWIW,这与此处提出的解决方案完全相同:stackoverflow.com/a/35840806/218196
  • 啊哈,我已经看到了,但跳过了它,因为我认为它与我看到的其他 reduce 解决方案相同。立即试用,提前致谢!
  • 是的,这就是诀窍。我会去投票另一个并将我的标记为骗子。谢谢!
猜你喜欢
  • 2017-02-03
  • 2014-06-30
  • 2017-05-13
  • 2018-02-23
  • 2021-03-05
  • 2023-03-30
相关资源
最近更新 更多