ReactJS / Javascript: функция отображения и рендеринга - PullRequest
0 голосов
/ 25 августа 2018

enter image description here Компонент Graph получает данные (проверено в консоли), но по какой-то причине страница все еще остается пустой.Я не уверен, что понимаю, как работает функция карты.Это последняя часть, которую мне нужно выяснить, чтобы визуализировать этот график, но по какой-то причине я не могу получить какую-либо графику на экране.Состояние узлов в консоли:

{data: {action: [{action: "Changed", timestamp: 1499348050,…},…]}}
    data:{action: [{action: "Changed", timestamp: 1499348050,…},…]}
      action:[{action: "User Assist Changed", timestamp: 1499348050,…},…]

Компонент графика:

import React, {Component} from 'react';
import * as d3 from "d3";
import {graphql} from 'react-apollo';
import getObjectsQuery from './Queries';

class Graph extends React.Component {
  constructor(props) {
    super(props);

    this.state = {  startTime:this.props.startTime, 
                    endTime:this.props.endTime,
                    nodes:this.props.getObjectsQuery
                  }
    //console.log('graph data:', this.props.data)
  }

  componentDidMount() {
   console.log('nodes:', this.props.data)
    this.force = d3.forceSimulation(this.props.data)
      .force("charge",
        d3.forceManyBody()
          .strength(this.props.forceStrength)
      )
      .force("x", d3.forceX(this.props.width / 2))
      .force("y", d3.forceY(this.props.height / 2));

    this.force.on('tick', () => this.setState({nodes: this.props.data}));
    console.log('setState:', this.props.data);
  }

  componentWillUnmount() {
    this.force.stop();
  }

    render() {
   // console.log('graph datas:', this.props.data)
    return (

      <svg width={this.props.width} height={this.props.height}>

      {Object.keys(this.props.data).map((action, index) =>(
     <circle r={action.action} cx={action.second} cy={action.obj} fill="red" key={index}/>
      ))}
      </svg>
    );
  }//render
}//Component

export default graphql(getObjectsQuery, 
  { options: (ownProps) => { 
    console.log(ownProps.startTime); 
    return ({ second: { startTime: ownProps.startTime,
                            endTime: ownProps.endTime
     } }) 
  } } )(Graph);

  Graph.defaultProps = {
    width: 300,
    height: 300,
    forceStrength: -10
  };

1 Ответ

0 голосов
/ 29 августа 2018

Если this.props.data.action является массивом, то его можно использовать непосредственно в карте:

{this.props.data.action.map((action,

, но this.props.data.action (и даже this.props.data?) Может быть неопределенным при запуске, первый рендер

использовать некоторые условия рендеринга для предотвращения ошибок, например

{!this.props.data.loading && this.props.data.action.map((action,

Проверить, присутствует ли loading ... структура пропущенных в компонент реквизитов может отображаться по-разному с помощью fn, определенного в config props свойство в graphql() (например, в случае конфликта имен реквизитов). Поиск примеров.

...