Javascript Reactjs dashboard-具有参数数组的多个实例
**最新小提琴-- 添加图表类型——是否有更好的方法向前推进——配置json是否可以通过redux处理——下一步是什么。以前是否有人尝试过使用reactjs和d3制作仪表板应用程序Javascript Reactjs dashboard-具有参数数组的多个实例,javascript,reactjs,Javascript,Reactjs,**最新小提琴-- 添加图表类型——是否有更好的方法向前推进——配置json是否可以通过redux处理——下一步是什么。以前是否有人尝试过使用reactjs和d3制作仪表板应用程序 我正在做一个reactjs项目,我渴望输出一组div持有者,其中将包含未来的图表参数,如宽度、高度、url服务 ++如何通过推拉多个参数来创建图表、占位符..的不同实例。。? ++这是创建一组组件的仪表板的良好开端吗?我需要为我想要吸收的图表、大小和服务创建一个配置json //配置json [{
我正在做一个reactjs项目,我渴望输出一组div持有者,其中将包含未来的图表参数,如宽度、高度、url服务 ++如何通过推拉多个参数来创建图表、占位符..的不同实例。。? ++这是创建一组组件的仪表板的良好开端吗?我需要为我想要吸收的图表、大小和服务创建一个配置json //配置json
[{
"width": 200,
"height": 200,
"type": "piechart",
"serviceApi": "api.php?mode=GetCars"
}, {
"width": 100,
"height": 100,
"type": "barchart",
"serviceApi": "api.php?mode=GetBoats"
}]
我是否需要创建一个配置json来控制参数——一个需要呈现的图表数组
var MultipleCharts = React.createClass({
render: function() {
return (
<div>
<div className="holder1"><PieChart width={this.props.width} height={this.props.height} service={this.props.service}/></div>
<div className="holder2"><PieChart width={this.props.width} height={this.props.height} service={this.props.service}/></div>
</div>
);
}
});
var MultipleCharts=React.createClass({
render:function(){
返回(
);
}
});
^这是一种硬编码方法,我需要循环和推送配置json,以便每个图表都有不同的属性
<div data-role="piechart" data-width=240 data-height=240 data-service="api.php?mode=GetCars">
//最新小提琴
这是第一个原型构建——我是否会让reactjs处理一堆图表——就好像这些信息来自配置json一样——就像仪表板设置一样
或者在模板上硬编码仪表板配置——并且reactjs调用图表工具
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>React Charts</title>
<script src="https://npmcdn.com/react@15.3.0/dist/react.js"></script>
<script src="https://npmcdn.com/react-dom@15.3.0/dist/react-dom.js"></script>
<script src="https://npmcdn.com/babel-core@5.8.38/browser.min.js"></script>
<script src="https://npmcdn.com/jquery@3.1.0/dist/jquery.min.js"></script>
<script src="https://npmcdn.com/remarkable@1.6.2/dist/remarkable.min.js"></script>
<script src="http://d3js.org/d3.v3.min.js"></script>
</head>
<body>
<div id="example"></div>
<script type="text/babel">
var config = [{
"width": 200,
"height": 200,
"type": "piechart",
"serviceApi": "api.php?mode=GetCars"
}, {
"width": 100,
"height": 100,
"type": "barchart",
"serviceApi": "api.php?mode=GetBoats"
}];
var MultipleCharts = React.createClass({
render: function() {
return (
<div>
<div className="holder1"><PieChart width={this.props.width} height={this.props.height} service={this.props.service}/></div>
<div className="holder2"><BarChart width={this.props.width} height={this.props.height} service={this.props.service}/></div>
</div>
);
}
});
var PieChart = React.createClass({
componentDidMount: function() {
var $this = $(ReactDOM.findDOMNode(this));
console.log("rendered div now engage d3");
// set el height and width etc.
},
render: function() {
return (
<div className="piechart" data-role="piechart" data-width={this.props.width} data-height={this.props.height} data-service={this.props.service}>pie.
</div>
);
}
});
var BarChart = React.createClass({
componentDidMount: function() {
var $this = $(ReactDOM.findDOMNode(this));
console.log("rendered div now engage d3");
// set el height and width etc.
},
render: function() {
return (
<div className="barchart" data-role="barchart" data-width={this.props.width} data-height={this.props.height} data-service={this.props.service}>pie.
</div>
);
}
});
ReactDOM.render(
<MultipleCharts width="200" height="200" service="api.php?mode=GetCars"/>,
document.getElementById('example')
);
</script>
</body>
</html>
反应图
变量配置=[{
“宽度”:200,
“高度”:200,
“类型”:“piechart”,
“serviceApi”:“api.php?mode=GetCars”
}, {
“宽度”:100,
“高度”:100,
“类型”:“条形图”,
“serviceApi”:“api.php?mode=getboots”
}];
var MultipleCharts=React.createClass({
render:function(){
返回(
);
}
});
var PieChart=React.createClass({
componentDidMount:function(){
var$this=$(ReactDOM.findDOMNode(this));
console.log(“呈现的div现在接合d3”);
//设置el高度和宽度等。
},
render:function(){
返回(
馅饼
);
}
});
var BarChart=React.createClass({
componentDidMount:function(){
var$this=$(ReactDOM.findDOMNode(this));
console.log(“呈现的div现在接合d3”);
//设置el高度和宽度等。
},
render:function(){
返回(
馅饼
);
}
});
ReactDOM.render(
,
document.getElementById('示例')
);
因此,您可以创建fabric方法,该方法将基于config.type
返回相应的组件
然后,您可以在render方法中迭代所有配置。
并将配置作为道具传递给组件MultipleCharts
var配置=[{
“宽度”:200,
“高度”:200,
“类型”:“piechart”,
“serviceApi”:“api.php?mode=GetCars”
}, {
“宽度”:100,
“高度”:100,
“类型”:“条形图”,
“serviceApi”:“api.php?mode=getboots”
}];
var MultipleCharts=React.createClass({
getChart:函数(配置){
开关(config.type){
“piechart”案例:
返回
“条形图”案例:
返回
}
},
渲染:函数(){
var config=this.props.config;
返回(
{config.map((chartConfig,index)=>{
返回(
{this.getChart(chartConfig)}
)
})}
);
}
});
var PieChart=React.createClass({
componentDidMount:函数(){
var$this=$(ReactDOM.findDOMNode(this));
console.log(“呈现的div现在接合d3”);
//设置el高度和宽度等。
},
渲染:函数(){
返回(
馅饼
);
}
});
var BarChart=React.createClass({
componentDidMount:函数(){
var$this=$(ReactDOM.findDOMNode(this));
console.log(“呈现的div现在接合d3”);
//设置el高度和宽度等。
},
渲染:函数(){
返回(
馅饼
);
}
});
ReactDOM.render(
,
document.getElementById('示例')
);代码>所以,您可以做的是创建fabric方法,该方法将基于config.type
返回相应的组件
然后,您可以在render方法中迭代所有配置。
并将配置作为道具传递给组件MultipleCharts
var配置=[{
“宽度”:200,
“高度”:200,
“类型”:“piechart”,
“serviceApi”:“api.php?mode=GetCars”
}, {
“宽度”:100,
“高度”:100,
“类型”:“条形图”,
“serviceApi”:“api.php?mode=getboots”
}];
var MultipleCharts=React.createClass({
getChart:函数(配置){
开关(config.type){
“piechart”案例:
返回
“条形图”案例:
返回
}
},
渲染:函数(){
var config=this.props.config;
返回(
{config.map((chartConfig,index)=>{
返回(
{this.getChart(chartConfig)}
)
})}
);
}
});
var PieChart=React.createClass({
componentDidMount:函数(){
var$this=$(ReactDOM.findDOMNode(this));
console.log(“呈现的div现在接合d3”);
//设置el高度和宽度等。
},
渲染:函数(){
返回(
馅饼
);
}
});
var BarChart=React.createClass({
componentDidMount:函数(){
变量$this=$(已反应)
.App {
text-align: center;
}
.App-logo {
animation: App-logo-spin infinite 20s linear;
height: 80px;
}
.App-header {
background-color: #222;
height: 150px;
padding: 20px;
color: white;
}
.App-intro {
font-size: large;
}
@keyframes App-logo-spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
import React, { Component } from 'react';
import './App.css';
import BarChart from './BarChart';
import PieChart from './PieChart';
import LineChart from './LineChart';
// Allowed types
const typeMapping = {
PieChart, // In ES6, it is the same as "PieChart": PieChart,
BarChart,
LineChart
};
class App extends Component {
getChart(config) {
const { type, ...props } = config;
return React.createElement(typeMapping[type], props);
}
render() {
var config = this.props.config;
return (
<div>
{config.map((chartConfig, index) => {
return (
<div key={index} className={'holder' + index}>
{this.getChart(chartConfig)}
</div>
)
})}
</div>
);
}
}
export default App;
//barchart
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
var $ = require("jquery");
class BarChart extends Component {
componentDidMount() {
var $this = $(ReactDOM.findDOMNode(this));
console.log("rendered div now engage d3", $this);
// set el height and width etc.
}
render() {
return (
<div className="barchart" data-role="barchart" data-width={this.props.width} data-height={this.props.height}
data-service={this.props.serviceApi}>bar.
</div>
);
}
};
export default BarChart;
body {
margin: 0;
padding: 0;
font-family: sans-serif;
}
.piechart{
background: pink;
width: 100px;
height: 50px;
border: 1px solid black;
}
.barchart{
background: green;
width: 100px;
height: 50px;
border: 1px solid black;
}
.linechart{
background: purple;
width: 100px;
height: 50px;
border: 1px solid black;
}
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import './index.css';
var config = [{
"type": "PieChart",
"width": 200,
"height": 200,
"serviceApi": "api.php?mode=GetCars"
}, {
"type": "BarChart",
"width": 100,
"height": 100,
"serviceApi": "api.php?mode=GetBoats"
}, {
"type": "LineChart",
"width": 100,
"height": 100,
"serviceApi": "api.php?mode=GetBoats"
}];
ReactDOM.render(
<App config={config} />,
document.getElementById('root')
);
//linechart
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
var $ = require("jquery");
class LineChart extends Component {
componentDidMount() {
var $this = $(ReactDOM.findDOMNode(this));
console.log("rendered div now engage d3", $this);
// set el height and width etc.
}
render() {
return (
<div className="linechart" data-role="linechart" data-width={this.props.width} data-height={this.props.height}
data-service={this.props.serviceApi}>line.
</div>
);
}
};
export default LineChart;
//piechart
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
var $ = require("jquery");
class PieChart extends Component {
componentDidMount() {
var $this = $(ReactDOM.findDOMNode(this));
console.log("rendered div now engage d3", $this);
// set el height and width etc.
var dataset = {
apples: [53245, 28479, 19697, 24037, 40245],
};
var width = 460,
height = 300,
radius = Math.min(width, height) / 2;
var color = d3.scale.category20();
var pie = d3.layout.pie()
.sort(null);
var arc = d3.svg.arc()
.innerRadius(radius - 100)
.outerRadius(radius - 50);
var svg = d3.select($this[0]).append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.attr("transform", "translate(" + width / 2 + "," + height / 2 + ")");
var path = svg.selectAll("path")
.data(pie(dataset.apples))
.enter().append("path")
.attr("fill", function(d, i) { return color(i); })
.attr("d", arc);
}
render() {
return (
<div className="piechart" data-role="piechart" data-width={this.props.width} data-height={this.props.height}
data-service={this.props.serviceApi}>pie.
</div>
);
}
};
export default PieChart;