React-Native Features
Achieve more with your charts, explore more React-Native features. Learn how to work using events, API's, modules or how to configure your license.
Working with Events#
You can add different events to you react-native chart, follow the steps below to learn how to attach a dataplotclick event to a chart.
import React, { Component } from 'react';
import { Platform, StyleSheet, Text, View, Alert } from 'react-native';
import ReactNativeFusionCharts from 'react-native-fusioncharts';
export default class ListenEvents extends Component {
constructor(props) {
super(props);
const chartConfig = {
type: 'column2d',
width: '100%',
height: '100%',
dataFormat: 'json',
dataSource: {
chart: {
caption: 'Countries With Most Oil Reserves [2017-18]',
subCaption: 'In MMbbl = One Million barrels',
xAxisName: 'Country',
yAxisName: 'Reserves (MMbbl)',
numberSuffix: 'K',
theme: 'fusion'
},
data: [
{ label: 'Venezuela', value: '290' },
{ label: 'Saudi', value: '260' },
{ label: 'Canada', value: '180' },
{ label: 'Iran', value: '140' },
{ label: 'Russia', value: '115' },
{ label: 'UAE', value: '100' },
{ label: 'US', value: '30' },
{ label: 'China', value: '30' }
]
}
};
this.state = {
chartConfig,
events: {
// Add your events method here:
// Event name should be in small letters.
dataplotclick: (e, a) => {
Alert.alert(`You clicked on ${e.data.categoryLabel}`);
}
}
};
}
render() {
return (
<View style={styles.container}>
<Text style={styles.header}>Listen to events from chart</Text>
<View style={styles.chartContainer}>
<ReactNativeFusionCharts
chartConfig={this.state.chartConfig}
events={this.state.events}
/>
</View>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
padding: 10
},
header: {
fontWeight: 'bold',
fontSize: 20,
textAlign: 'center',
paddingBottom: 10
},
chartContainer: {
height: 400,
borderColor: '#000',
borderWidth: 1
}
});
Working with APIs#
You can also enhance your charts by adding some API's, follow these simple steps to lean how to change the chart type dynamically using chart APIs.
import React, { Component } from 'react';
import { Platform, StyleSheet, Text, View, Button, Alert } from 'react-native';
import ReactNativeFusionCharts from 'react-native-fusioncharts';
export default class ChartRunTime extends Component {
constructor(props) {
super(props);
// Create a property(e.g: apiCaller) which will get attached to a function
// where you can pass Chart API methods you want to run.
this.apiCaller = null;
const chartConfig = {
type: 'column2d',
width: '100%',
height: '100%',
dataFormat: 'json',
dataSource: {
chart: {
caption: 'Recommended Portfolio Split',
subCaption: 'For a net-worth of $1M',
showValues: '1',
showPercentInTooltip: '0',
numberPrefix: '$',
enableMultiSlicing: '1',
theme: 'fusion',
exportEnabled: 1
},
data: [
{
label: 'Equity',
value: '300000'
},
{
label: 'Debt',
value: '230000'
},
{
label: 'Bullion',
value: '180000'
},
{
label: 'Real-estate',
value: '270000'
},
{
label: 'Insurance',
value: '20000'
}
]
}
};
this.state = {
chartConfig,
chartType: ''
}
}
changeType(type) {
this.setState({ chartType: type }, () => {
// Chart instance is available here.
// Passing js code to run chart api method.
this.apiCaller(`chartType('${type}')`); // This method accepts js code in string.
});
}
// Bind the argument from onInitialized with the property you created in your constructor
bindApiCaller(caller) {
// Now this.apiCaller will be a function where you can pass js code for the WebView
// to access the chart Object. See the method changeType.
this.apiCaller = caller;
if (this.state.chartType === '')
this.setState({ chartType: this.state.type });
}
render() {
return (
<View style={styles.container}>
<Text style={styles.header}>Change chart type at runtime</Text>
<View style={styles.chartContainer}>
<ReactNativeFusionCharts
chartConfig={this.state.chartConfig}
onInitialized={caller => {
this.bindApiCaller(caller);
}}
/>
</View>
<Text style={styles.info}>Press button to change chart type</Text>
<View style={styles.buttonContainer}>
<Button
disabled={
this.state.chartType === '' || this.state.chartType == 'column2d'
}
style={{ margin: 8 }}
title="Column2D"
onPress={() => this.changeType('column2d')}
/>
<Button
disabled={
this.state.chartType === '' || this.state.chartType == 'pie2d'
}
title="Pie2D"
onPress={() => this.changeType('pie2d')}
/>
<Button
disabled={
this.state.chartType === '' || this.state.chartType == 'bar2d'
}
title="Bar2D"
onPress={() => this.changeType('bar2d')}
/>
</View>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
padding: 10
},
header: {
fontWeight: 'bold',
fontSize: 20,
textAlign: 'center',
paddingBottom: 10
},
chartContainer: {
height: 400,
borderColor: '#000',
borderWidth: 1
},
buttonContainer: {
padding: 10,
display: 'flex',
justifyContent: 'space-around',
flexDirection: 'row',
alignItems: 'center'
},
info: {
fontSize: 16,
textAlign: 'center',
marginTop: 5
}
});
Working with modules#
Add modules dynamically. Follow these steps to learn how to add modules dynamicalle e.g gantt, timeseries, powercharts, etc.
import React, { Component } from "react";
import { StyleSheet, View } from "react-native";
import ReactNativeFusionCharts from "react-native-fusioncharts";
export default class App extends Component {
constructor(props) {
super(props);
const chartConfig = {
type: "gantt", // your chart type goes here
width: "100%",
height: "400",
dataFormat: "json",
dataSource: { // your data goes here
// for gantt chart data please visit https://www.fusioncharts.com/dev/chart-attributes/gantt
}
};
this.state = {
chartConfig
};
}
render() {
const modules = ['gantt']; // module names goes here
return (
<View style={styles.container}>
<View style={styles.chartContainer}>
<ReactNativeFusionCharts
chartConfig={this.state.chartConfig}
modules={modules}
/>
</View>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
padding: 10
},
chartContainer: {
height: '60%',
borderColor: "#000",
borderWidth: 1
}
});
Here is how to add the theme modules dynamically e.g candy, carbon, gammel, etc.
import React, { Component } from 'react';
import { Platform, StyleSheet, Text, View, Alert } from 'react-native';
import ReactNativeFusionCharts from 'react-native-fusioncharts';
export default class ListenEvents extends Component {
constructor(props) {
super(props);
const chartConfig = {
type: 'column2d',
width: '100%',
height: '100%',
dataFormat: 'json',
dataSource: {
chart: {
caption: 'Countries With Most Oil Reserves [2017-18]',
subCaption: 'In MMbbl = One Million barrels',
xAxisName: 'Country',
yAxisName: 'Reserves (MMbbl)',
numberSuffix: 'K',
theme: 'carbon', // your theme name goes here
exportEnabled: 1
},
data: [
{ label: 'Venezuela', value: '290' },
{ label: 'Saudi', value: '260' },
{ label: 'Canada', value: '180' },
{ label: 'Iran', value: '140' },
{ label: 'Russia', value: '115' },
{ label: 'UAE', value: '100' },
{ label: 'US', value: '30' },
{ label: 'China', value: '30' }
]
}
};
this.state = {
chartConfig
};
}
render() {
const modules = ['carbon']; // theme module name
return (
<View style={styles.container}>
<Text style={styles.header}>Listen to events from chart</Text>
<View style={styles.chartContainer}>
<ReactNativeFusionCharts
chartConfig={this.state.chartConfig}
modules={modules}
/>
</View>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
padding: 10
},
header: {
fontWeight: 'bold',
fontSize: 20,
textAlign: 'center',
paddingBottom: 10
},
chartContainer: {
height: 400,
borderColor: '#000',
borderWidth: 1
}
});
License Configuration#
If you are using a licensed verison of FusionCharts and have a valid license key, add the license object by either creating a new file with your license configuration inside it and import it in 'app.js' or add 'global.licenseConfig' object to the 'app.js' file as shown below.
import React, { Component } from "react";
import { StyleSheet, View } from "react-native";
import ReactNativeFusionCharts from "react-native-fusioncharts";
global.licenseConfig = {
key: "your key goes here",
creditLabel: false // true/false to show/hide watermark respectively
};
export default class App extends Component {
constructor(props) {
super(props);
const chartConfig = {
type: "column2D",
width: "100%",
height: "400",
dataFormat: "json",
dataSource: {
chart: {
caption: "Countries With Most Oil Reserves [2017-18]",
subCaption: "In MMbbl = One Million barrels",
xAxisName: "Country",
yAxisName: "Reserves (MMbbl)",
numberSuffix: "K",
theme: "fusion",
exportEnabled: 1
},
data: [
{ label: "Venezuela", value: "250" },
{ label: "Saudi", value: "260" },
{ label: "Canada", value: "180" },
{ label: "Iran", value: "140" },
{ label: "Russia", value: "115" },
{ label: "UAE", value: "100" },
{ label: "US", value: "30" },
{ label: "China", value: "30" }
],
},
};
this.state = {
chartConfig
};
}
render() {
return (
<View style={styles.container}>
<View style={styles.chartContainer}>
<ReactNativeFusionCharts
chartConfig={this.state.chartConfig}
/>
</View>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
padding: 10
},
chartContainer: {
height: '60%',
borderColor: "#000",
borderWidth: 1
}
});
Usage and integration of FusionTime#
From `fusioncharts@3.13.3-sr.1and
react-native-fusioncharts@3.0.0`, You can visualize timeseries data easily on react.
Learn more about FusionTime here.
Consider the example below for integration of FusionTime#
// In App.js
import React, { Component } from 'react';
import { AppRegistry, StyleSheet, Text, View, Platform } from 'react-native';
import ReactNativeFusionCharts from 'react-native-fusioncharts';
export default class App extends Component {
constructor(props) {
super(props);
const chartConfig = {
type: 'timeseries',
width: '100%',
height: '100%',
dataFormat: 'json',
dataSource: {
data: null,
caption: {
text: 'Sales Analysis'
},
subcaption: {
text: 'Grocery'
},
yAxis: [
{
plot: {
value: 'Grocery Sales Value',
type: 'line'
},
format: {
prefix: '$'
},
title: 'Sale Value'
}
]
},
schemaJson: null,
dataJson: null
};
this.state = {
chartConfig
}
}
componentDidMount() {
this.fetchDataAndSchema();
}
fetchDataAndSchema() {
const jsonify = res => res.json();
const dFetch = fetch(
'https://s3.eu-central-1.amazonaws.com/fusion.store/ft/data/line-chart-with-time-axis-data.json'
).then(jsonify);
// This is the remote url to fetch the schema.
const sFetch = fetch(
'https://s3.eu-central-1.amazonaws.com/fusion.store/ft/schema/line-chart-with-time-axis-schema.json'
).then(jsonify);
Promise.all([dFetch, sFetch]).then(res => {
const data = res[0];
const schema = res[1];
const updatedChartConfig = {...this.state.chartConfig, dataJson: data, schemaJson: schema}
this.setState({ chartConfig: updatedChartConfig });
});
}
render() {
const modules = ['timeseries'];
return (
<View style={styles.container}>
<Text style={styles.heading}>
FusionCharts Integration with React Native
</Text>
<View style={styles.chartContainer}>
<ReactNativeFusionCharts
chartConfig={this.state.chartConfig}
modules={modules}
/>
</View>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
padding: 10
},
heading: {
fontSize: 20,
textAlign: 'center',
marginBottom: 10
},
chartContainer: {
height: 500
}
});
Going Beyond Charts#
- Explore 20+ pre-built business specific dashboards for different industries like energy and manufacturing to business functions like sales, marketing and operations here.
- See Data Stories built using FusionCharts’ interactive JavaScript visualizations and learn how to communicate real-world narratives through underlying data to tell compelling stories.