尝试在同一React组件中加载多个C3图表

罗曼

我正在尝试在数组上映射,并让图表与每个元素一起显示,但是它似乎不起作用。相同的代码曾经正确地出现过一次,但是没有其他时间了,我不确定我缺少什么。

我试图将ID名称更改为它标记图表的位置,并通过添加索引变量来做到这一点,但仍然无法正常工作

import React from 'react'
import c3 from '/c3.min.js'

class SearchedFood extends React.Component {
  constructor(props) {
    super(props)
    this.state = {

    }
    this.graph = this.graph.bind(this)
  }


  graph(index) {
    c3.generate({
        bindto: '#class' + index,
        data: {
        columns: [
            [1, 2, 3], [2, 3,4]
        ],
        type: 'bar'
        },
        bar: {
            width: {
                ratio: 0.3
            }
        }
   })}


  render () {
    return (
      <div>
        {this.props.foodResults.map((food, i) => {
          return (
            <div key={i}>
             <label>{food.recipe.label}</label>
             <img className="card-img-top" src={food.recipe.image} height="250" width="auto"></img>
             <a href={food.recipe.url}>{food.recipe.source}</a>
             <p>{food.recipe.dietLabels[0]}</p>

             <div>
              {food.recipe.ingredientLines.map((ingredient, i) => {
                return (
                  <p key={i}>{ingredient}</p>
                ) 
              })}
            </div>

            <p>Calories {Math.floor(food.recipe.calories/food.recipe.yield)}</p>


            <div id={`class${i}`}>{this.graph(i)}</div>


          </div>
        )
      })}

    </div>
    )
  }
}

export default SearchedFood
泰勒·塞巴斯蒂安(Tyler Sebastian)

bindto: '#class' + index,/{this.graph...}不起作用。React不会直接/立即呈现给DOM。

看起来您可以在其中使用元素bindTo-最好的选择是使用ref

class SearchedFoodRow extends React.Component {
  componentDidMount() {
    c3.generate({
      bindTo: this.element,
      ...
    })
  }

  render() {
    const { food } = this.props

    return (
      <div>
        <label>{food.recipe.label}</label>
        <img className="card-img-top" src={food.recipe.image} height="250" width="auto"></img>
        <a href={food.recipe.url}>{food.recipe.source}</a>
        <p>{food.recipe.dietLabels[0]}</p>

        <div>
          {food.recipe.ingredientLines.map((ingredient, i) => {
            return (
              <p key={i}>{ingredient}</p>
            ) 
          })}
        </div>

        <p>Calories {Math.floor(food.recipe.calories/food.recipe.yield)}</p>
        <div ref={ element => this.element = element } />
      </div>
    )
  }
}

然后

class SearchFood extends React.Component {
  render() {
    return (
      <div>
        { this.props.foodResults.map((food, i) => <SearchedFoodRow key={i} food={food} />)}
      </div>
    )
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章