【问题标题】:React Dynamically render component within div based on div idReact 根据 div id 在 div 内动态渲染组件
【发布时间】:2021-08-17 16:23:50
【问题描述】:

我正在从头开始构建一个离散的条形图组件,以显示一天中每个小时的航班到达/离开。我需要将一些数据(航班和时间)基本上匹配到特定的 div 并将其呈现在 div 中。例如in image,我需要获取飞机列表,确定它是否用于Arrivals/destinations并将其与x轴时间范围匹配并在适当的div内渲染。我可以有唯一的 div id 查看示例

{
    "AirplaneData": {
      "Arrivals":[
        {"BIO": "0:00"}, 
        {"VGU": "2.00"}, 
        {"MEX": "4.00"}],
      "Departures": [
        {"BIO": "3:00"}, 
        {"VGU": "4.00"}, 
        {"MEX": "6.00"}]
      
    }
  }
  
  <div className={classes.bars}>
    <div className={classes.graph}>
      <div className={classes.bar} key="somekey">{DISPLAY SOME COMPONENT HERE}</div>
      <div className={classes.label1}><span style= {{marginLeft: "10px"}}>0.00</span></div>
      <div className={classes.bar}></div>
    </div>
    <div className={classes.graph}>
      <div className={classes.bar} key="someotherkey"><h1>{DISPLAY SOME COMPONENT HERE}</h1></div>
      <div className={classes.label2}><span style= {{marginLeft: "10px"}}>1.00</span></div>
      <div className={classes.bar}></div>
    </div>
</div>

.... repeat divs for every hour

如何在适当的 div 中渲染飞机时间数据(基本上将 div 键与飞机数据中的时间匹配。)

【问题讨论】:

  • id 推荐一种不同的方法...获取飞行数据对象...将其转换为与 GUI 设计匹配的对象列表...然后从那里它是新对象的简单地图

标签: reactjs react-component react-chartjs react-vis


【解决方案1】:

那么,如果您说您想从数据列表中动态呈现内容?我会研究mapfilter 函数。

通过您的示例,您可以使用您的数据数组返回一组 div。类似这个概念airplaneDataArray.map(data =&gt; return &lt;div&gt;...&lt;/div&gt;);

映射数组中的“数据”几乎代表数组中的一个片段,因此您可以使用data.arrivals.key 调用数组的特定部分,依此类推。这将动态生成 div,而无需硬编码一堆 div 行。

现在,如果您只想获取特定时间的到达,您可以使用过滤器过滤掉与您想要的时间不匹配的到达。老实说,没有完全理解您的用例,所以一个更好的示例或更深入的内容会有所帮助。

【讨论】:

  • 谢谢!我觉得这有点道理。我对硬编码一堆 div 也不是很满意。对于我的用例,我真的不需要过滤到达或离开。我所需要的只是一种获取飞机数据并直观显示的方法。我可能需要在视觉上对航班进行一段时间的排序(但这很容易做到)。我想知道的唯一部分是需要确保如果给定时间没有到达/离开例如:在图表中 0:00 没有航班它只显示背景。
  • 好的,如果你按时间显示,我的建议是你应该有不同的数据结构。相反,您的时间应该是顶级键,然后该时间的每个航班都应该嵌套在该键下。就像在到达时有 "00:00": { "BIO": "00:00" },甚至更好,只需将每个航班存储在数组 "00:00": ["BIO", "VLG" 等中。 ]。然后就可以遍历data的key并显示key,然后就可以轻松的显示flights了。
  • 谢谢!这就是我的想法!感谢您的帮助!
猜你喜欢
  • 2022-01-25
  • 1970-01-01
  • 2014-12-18
  • 2018-02-17
  • 2016-06-13
  • 1970-01-01
  • 2020-12-10
  • 2020-02-28
  • 1970-01-01
相关资源
最近更新 更多