Reactjs 多用户反应表中的雷达图

Reactjs 多用户反应表中的雷达图,reactjs,Reactjs,我试图为团队成员构建雷达图,以检查他们如何为项目做出贡献,因此对于成员,我想创建一个雷达图,显示各个领域。这个想法是在一个表中构造对应于每个团队成员的数据——但我总是得到空的图表。 相同的数据类似于: Data:[ {name: 'ABC', gitCommit: '200', gitPull: '3', jira: '4', slack: '5', confluence: '6'}, {name: 'XYZ', gitCommit: '200', gitPull:

我试图为团队成员构建雷达图,以检查他们如何为项目做出贡献,因此对于成员,我想创建一个雷达图,显示各个领域。这个想法是在一个表中构造对应于每个团队成员的数据——但我总是得到空的图表。 相同的数据类似于:


    Data:[
    {name: 'ABC', gitCommit: '200', gitPull: '3', jira: '4', slack: '5', confluence: '6'},
     {name: 'XYZ', gitCommit: '200', gitPull: '3', jira: '4', slack: '5', confluence: '6'}
    ]

我创建了一个表:


    <table id='projects' className="zebra" data-sortable="">
                                    <tbody>
                                    <tr>{this.renderChartHeader()}</tr>
                                    {this.renderChart()}
                                    </tbody>
                                </table>


{this.renderCharthReader()}
{this.renderChart()}
一经签署,将调用以下内容:


    renderChart(){
            return this.state.Data.map((Data, index) => {
                return(
                    <tr key={Data.name}>
                    <td>{Data.name}</td>
                    <td>
                    <RadarChart cx={300} cy={250} outerRadius={150} width={500} height={500} data={Data}>
                        <PolarGrid gridType='circle'/>
                        <PolarAngleAxis dataKey="name" />
                        <PolarRadiusAxis angle={30} domain={[0, 10]} />
                        <Radar name="Sara" dataKey="jira" stroke="#8884d8" fill="#8884d8" fillOpacity={0.6} />
                        <Legend />
                    </RadarChart>
                    </td>
                    </tr>
                )
            })
        }


renderChart(){
返回此.state.Data.map((数据,索引)=>{
返回(
{Data.name}
)
})
}
我们的想法是让一张桌子看起来像这样:

编辑 添加了代码的完整版本 在这段代码中,当我们点击一个按钮时,handleSubmit将被使用,它将从后端API填充数据-数据变量将被填充-但现在我正在尝试使用数据变量中的硬编码值


    import React from 'react';
    import uomHeader from '../header/uomheader.js';
    import { connect } from 'react-redux';
    import { userActions } from '../_actions';
    import { storeGet } from '../_helpers/helper-funcs.js';
    import BarChart from 'react-bar-chart';
    import {
        Radar, RadarChart, PolarGrid, Legend,
        PolarAngleAxis, PolarRadiusAxis,
      } from 'recharts';
    // import Paper from '@material-ui/core/Paper';
    // import {
    //     Chart,
    //     BarSeries,
    //     Title,
    //     ArgumentAxis,
    //     ValueAxis,
    //   } from '@devexpress/dx-react-chart-material-ui';
    // import { Animation } from '@devexpress/dx-react-chart';
    const team = 1;
    const teamName = "SWEN90013-2020-SP";
    const margin = {top: 20, right: 20, bottom: 30, left: 40};
    
    class IndividualContributionPage extends React.Component{
        constructor(props){
            super(props);
            this.state = {
                
                projectName: '',
                submitted: false,
                total: [
                    {student_id:'', fullname:''}
                ],
                // The Array to store the data
                Data:[
    
                    {name: 'ABC', gitCommit: '200', gitPull: '3', jira: '4', slack: '5', confluence: '6'},
                    {name: 'XYZ', gitCommit: '200', gitPull: '3', jira: '4', slack: '5', confluence: '6'},
                    // {name: '', gitCommit: '', gitPull: '', jira: '', slack: '', confluence: ''},
                    // {name: '', gitCommit: '', gitPull: '', jira: '', slack: '', confluence: ''},
                    // {name: '', gitCommit: '', gitPull: '', jira: '', slack: '', confluence: ''},
                    // {name: '', gitCommit: '', gitPull: '', jira: '', slack: '', confluence: ''},
                    // {name: '', gitCommit: '', gitPull: '', jira: '', slack: '', confluence: ''},
                    // {name: '', gitCommit: '', gitPull: '', jira: '', slack: '', confluence: ''},
                    // {name: '', gitCommit: '', gitPull: '', jira: '', slack: '', confluence: ''},
                    // {name: '', gitCommit: '', gitPull: '', jira: '', slack: '', confluence: ''},
                    // {name: '', gitCommit: '', gitPull: '', jira: '', slack: '', confluence: ''},            
                ],
               
            }
    
            this.handleChange = this.handleChange.bind(this);
            this.handleSubmit = this.handleSubmit.bind(this);
    
        }
    
        handleChange(e) {
            
            const { name, value } = e.target;
            this.setState({ [name]: value });
        }
    
    
        handleSubmit(e) {
            
            e.preventDefault();
            const { projectName} = this.state;
    
            this.props.getTeamList(team);
            this.setState({ submitted: true });
            
            if(storeGet("teamList")!=null){
                for(var i in storeGet("teamList")){
                    // Get the member's configuration
    
                    this.props.getMemberConfiguration(projectName,storeGet("teamList")[i].student_id);
                    console.log("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%");
                    console.log(storeGet("memberConfig"));
    
                    // Get the full name
                    this.state.Data[i].name = storeGet("teamList")[i].fullname;
                    console.log(this.state.Data[i].name);
    
                    //Get SLACK - need User ID
                    this.props.getSlackUser(team, storeGet("teamList")[i].student_id);
                    //Get JIRA data - need User ID
                    this.props.getJiraUser(teamName, storeGet("teamList")[i].student_id);
    
                    // TODO
                    // Get Git Data - need Git Username, currently hardcoded
                    this.props.codeCommitsPerMember(projectName, "zhanglihuan");
                    // TODO
                    //Get Conflunece Data - need Username, currently hardcoded
                    this.props.numPagesPerMember("yujuzhang");
    
            
                    if(storeGet("commitsPerMember")!=null){
                        this.state.Data[i].gitCommit = storeGet("commitsPerMember").total;
                        // TODO: No pull request in the return value, so using the file_changed in temporary
                        this.state.Data[i].gitPull = storeGet("commitsPerMember").file_changed;
                    }
    
    
                    // console.log(this.state.Data[i].gitCommit);
                    // console.log(this.state.Data[i].gitPull);
    
                    if(storeGet("slackUser")!=null){
                        this.state.Data[i].slack = storeGet("slackUser")['total_number'];
                    }
                    // if(storeGet("jiraUser")!=null){
                    //     this.props.Data[i].jira = storeGet("jiraUser")['count_issues_done'];
                    // }
                    // console.log(storeGet("numPagesPerMember"));
                    // if(storeGet("numPagesPerMember")!=null){
                    //     this.props.Data[i].confluence = storeGet("numPagesPerMember");
                    // }
                   
                }
                    
            }
    
    
    
        }
        
        render() {
            const {submitted} = this.state;
    
            return (
                <div className="uomcontent">
                    {uomHeader("Individual Contribution Page")}
                    <div role="main">
                        <div className="page-inner">
                            <form name="form">   
                                <div>
                                    <a className="button cta" onClick={this.handleSubmit} >Fetch</a>
                                </div>
                                {submitted && 
                                <table id='projects' className="zebra" data-sortable="">
                                    <tbody>
                                    <tr>{this.renderChartHeader()}</tr>
                                    {this.renderChart()}
                                    </tbody>
                                </table>   
                                }
                            </form>
                        </div>
                    </div>
                </div>
            )
        }
    
        renderChartHeader() {
            let header = ['Student Name', 'Radar Chart'];
            return header.map((key, index) => {
                return <th key={index}>{key.toUpperCase()}</th>
            })
          
        }
        
        renderChart(){
            return this.state.Data.map((Data, index) => {
                return(
                    <tr key={Data.name}>
                    <td>{Data.name}</td>
                    <td>
                    <RadarChart cx={300} cy={250} outerRadius={150} width={500} height={500} data={Data}>
                        <PolarGrid gridType='circle'/>
                        <PolarAngleAxis dataKey="name" />
                        <PolarRadiusAxis angle={30} domain={[0, 10]} />
                        <Radar name="ABC" dataKey="jira" stroke="#8884d8" fill="#8884d8" fillOpacity={0.6} />
                        <Legend />
                    </RadarChart>
                    </td>
                    </tr>
                )
            })
        }
    
        
    
    }
    
    function mapState(state) {
        
        const { projectName } = state;
        return { projectName };
    }
    
    const actionCreators = {
        loginGit: userActions.loginGit,
        totalCodeCommits: userActions.totalCodeCommits,
        codeCommitsPerMember: userActions.codeCommitsPerMember,
        AllPagesOnConfluence: userActions.AllPagesOnConfluence,
        getTeamList: userActions.getTeamList,
        getMemberConfiguration: userActions.getMemberConfiguration,
        getSlackUser: userActions.getSlackUser,
        getJiraUser: userActions.getJiraUser,
        numPagesPerMember: userActions.numPagesPerMember,
    };
    
    
    const Product = connect(mapState, actionCreators)(IndividualContributionPage);
    export { Product as IndividualContributionPage };


从“React”导入React;
从“../header/uomHeader.js”导入uomHeader;
从'react redux'导入{connect};
从“../\u actions”导入{userActions};
从“../\u helpers/helper funcs.js”导入{storeGet};
从“反应条形图”导入条形图;
进口{
雷达,雷达艺术,北极星,传奇,
极光,极光,
}来自‘雷查特’;
//从“@material ui/core/Paper”导入纸张;
//进口{
//图表,
//酒吧系列,
//头衔,
//论证轴,
//ValueAxis,
//}来自“@devexpress/dx react chart material ui”;
//从“@devexpress/dx react chart”导入{Animation};
施工队=1;
const teamName=“SWEN90013-2020-SP”;
常量边距={顶部:20,右侧:20,底部:30,左侧:40};
类IndividualContributionPage扩展React.Component{
建造师(道具){
超级(道具);
此.state={
项目名称:“”,
提交:假,
总数:[
{学生id:'',全名:'}
],
//存储数据的数组
数据:[
{name:'ABC',gitCommit:'200',gitPull:'3',jira:'4',slack:'5',converge:'6'},
{name:'XYZ',gitCommit:'200',gitPull:'3',jira:'4',slack:'5',converge:'6'},
//{名称:'',gitCommit:'',gitPull:'',jira:'',slack:'',汇流:'},
//{名称:'',gitCommit:'',gitPull:'',jira:'',slack:'',汇流:'},
//{名称:'',gitCommit:'',gitPull:'',jira:'',slack:'',汇流:'},
//{名称:'',gitCommit:'',gitPull:'',jira:'',slack:'',汇流:'},
//{名称:'',gitCommit:'',gitPull:'',jira:'',slack:'',汇流:'},
//{名称:'',gitCommit:'',gitPull:'',jira:'',slack:'',汇流:'},
//{名称:'',gitCommit:'',gitPull:'',jira:'',slack:'',汇流:'},
//{名称:'',gitCommit:'',gitPull:'',jira:'',slack:'',汇流:'},
//{名称:'',gitCommit:'',gitPull:'',jira:'',slack:'',汇流:'},
],
}
this.handleChange=this.handleChange.bind(this);
this.handleSubmit=this.handleSubmit.bind(this);
}
手变(e){
常量{name,value}=e.target;
this.setState({[name]:value});
}
handleSubmit(e){
e、 预防默认值();
const{projectName}=this.state;
this.props.getTeamList(团队);
this.setState({submitted:true});
如果(storeGet(“团队列表”)!=null){
对于(storeGet中的var i(“团队列表”)){
//获取成员的配置
this.props.getMemberConfiguration(projectName,storeGet(“teamList”)[i].student\u id);
console.log(“%%%%%%%%%%%%”);
log(storeGet(“memberConfig”);
//获取全名
this.state.Data[i].name=storeGet(“团队列表”)[i].fullname;
console.log(this.state.Data[i].name);
//获取SLACK-需要用户ID
this.props.getSlackUser(team,storeGet(“teamList”)[i].student\u id);
//获取JIRA数据-需要用户ID
this.props.getJiraUser(teamName,storeGet(“teamList”)[i].student\u id);
//待办事项
//获取Git数据-需要Git用户名,当前为硬编码
this.props.codeCommitsPerMember(项目名称,“zhanglihuan”);
//待办事项
//获取冲突数据-需要用户名,当前为硬编码
这个.props.numPagesPerMember(“yujuzhang”);
if(storeGet(“commitsPerMember”)!=null){
this.state.Data[i].gitCommit=storeGet(“commitsPerMember”).total;
//TODO:返回值中没有拉取请求,因此使用临时更改的文件
this.state.Data[i].gitPull=store