首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >集成Rickshaw JS和React

集成Rickshaw JS和React
EN

Stack Overflow用户
提问于 2016-10-18 17:20:00
回答 2查看 1.1K关注 0票数 1

我有两个文件,bundle.jsx (包含React组件)和app.js (包含JS函数,其中包括用于构建图形的Rickshaw类)。

在我呈现的类中的反应模块(bundle.jsx)中

代码语言:javascript
复制
<div id="chart_container" />

在我的js文件中,我构建了这个div。

代码语言:javascript
复制
var graph = new Rickshaw.Graph.Ajax( {
element: document.querySelector("#chart_container"), ... 
}

问题是,当我加载这两个文件时,我希望每当由React呈现div组件时,就会创建图形。但是,情况并非如此,因为我的app.js文件是在呈现React组件之前被处理的。

解决这个问题的最好办法是什么?我是否也正确地处理了这个问题?

我尝试在app.js上添加一个app.js,以便在x秒后加载函数。这解决了这个问题,并呈现了图形,但并不是傻瓜,因为有时反应性组件不会在x秒内呈现,或者呈现速度比x秒快得多。

有什么帮助/建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-18 19:04:13

你在找componentDidMount()。该方法是在组件第一次呈现后执行的,因此您可以确保图表容器的存在。下面是一个例子,说明了这一点:

代码语言:javascript
复制
class Example extends React.Component {
  componentDidMount() {
    var graph = new Rickshaw.Graph( {
      element: document.querySelector("#chart_container"), 
      width: 300, 
      height: 200, 
      series: [{
        color: 'steelblue',
        data: [ 
          { x: 0, y: 40 }, 
          { x: 1, y: 49 }, 
          { x: 2, y: 38 }, 
          { x: 3, y: 30 }, 
          { x: 4, y: 32 } ]
      }]
    });

    graph.render();
  }

  render() {
    return(
      <div id="chart_container" />
    );
  }
}

ReactDOM.render(<Example/>, document.getElementById('View'));
代码语言:javascript
复制
<!-- React -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.8/react.min.js"></script>
<!-- React DOM -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.8/react-dom.min.js"></script>
<!-- D3 -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<!-- Rickshaw -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/rickshaw/1.6.0/rickshaw.min.js"></script>

<div id="View"></div>

票数 2
EN

Stack Overflow用户

发布于 2020-09-03 17:13:28

如果使用带有React的Rickshaw,可以确保首先通过useEffect钩子加载DOM元素。

代码语言:javascript
复制
  useEffect(() => {
    const graph = new Rickshaw.Graph({
      element: document.querySelector('#chart'),
      renderer: 'scatterplot',
      stroke: true,
      series: [
        {
          data: [...someData],
          color: 'steelblue',
        },
      ],
    });

    graph.render();
  }, []);
代码语言:javascript
复制
  // Then in the functional component...
  return (<div id="chart" />);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40114367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档