A collection of uPlot wrappers that allow you to work with charts declaratively inside your favorite framework.
Table of Contents
While several other uPlot wrappers already exist, all of them have one of the following limitations:
In comparison this library tries it's best not to recreate the uPlot instance once the props change. Instead of recreation it tries to use uPlot public API to keep it up to date with the props.
See React, Vue.js or Svelte sections below depending on what framework you're using. Also see API documentation common to all frameworks.
Install uplot-react package with uplot dependency:
$ npm install uplot-react uplot
$ yarn add uplot-react uplot
You also need React 16.8 or above to be installed inside your project tree.
import React from 'react';
import uPlot from 'uplot';
import UplotReact from 'uplot-react';
import 'uplot/dist/uPlot.min.css';
const Chart = () => (
<UplotReact options={options} data={data} target={target} onCreate={(chart) => {}} onDelete={(chart) => {}} />
);
See the live demo
You can also run the demo app locally:
$ git clone https://github.com/skalinichev/uplot-wrappers.git
$ cd uplot-wrappers && yarn install && yarn run serveReact
simple example for getting started quickly. ReactJS Demo
Install uplot-vue package with uplot dependency:
$ npm install uplot-vue uplot
$ yarn add uplot-vue uplot
You also need Vue.js to be installed inside your project tree (both 2.6 and 3.x versions are supported).
Using template
<template>
<UplotVue :data="data" :options="options" :target="target" @create="onCreate" @delete="onDelete" />
</template>
<script>
// Vue.js 2
import Vue from 'vue';
// Vue.js 3
import { createApp } from 'vue';
import uPlot from 'uplot';
import UplotVue from 'uplot-vue';
import 'uplot/dist/uPlot.min.css';
// Vue.js 2
const Chart = Vue.extend({ components: { uplotvue: UplotVue } });
// Vue.js 3
const Chart = createApp({ components: { uplotvue: UplotVue } });
</script>
Using JSX
// Vue.js 2
import Vue from 'vue';
// Vue.js 3
import { createApp } from 'vue';
import uPlot from 'uplot';
import UplotVue from 'uplot-vue';
import 'uplot/dist/uPlot.min.css';
{
...,
render() {
return (
<UplotVue
options={options}
data={data}
target={target}
onDelete={(chart) => {}}
onCreate={(chart) => {}}
/>
);
}
}
Note: Property changes by mutation are not supported due to Vue limitation You have to create a copy of the property, i.e. replace it instead, see an example for the general idea.
See the Vue.js 2 live demo
You can also run the demo app locally:
$ git clone https://github.com/skalinichev/uplot-wrappers.git
$ cd uplot-wrappers && yarn install
Vue.js 2:
$ yarn run serveVue
Vue.js 3:
$ yarn run serveVue3
Install uplot-svelte package with uplot dependency:
$ npm install uplot-svelte uplot
$ yarn add uplot-svelte uplot
You also need Svelte to be installed inside your project tree. UplotSvelte component is compatible with Svelte and SvelteKit projects.
<script lang="ts">
import UplotSvelte from 'uplot-svelte';
import uPlot from 'uplot';
import 'uplot/dist/uPlot.min.css';
...
</script>
<UplotSvelte {options} {data} onCreate={onCreate} onDelete={onDelete} />
See the example Svelte example
You can also run the demo app locally:
$ git clone https://github.com/skalinichev/uplot-wrappers.git
$ cd uplot-wrappers && yarn install && yarn run serveSvelte
Parameter | Requirement | Description |
---|---|---|
options | required | Options for uPlot. Passed as the first argument to uPlot constructor: new uPlot(options) |
data | required | Data for uPlot. Passed as the second argument to uPlot constructor: new uPlot(options, data) |
target | optional | Target html element for uPlot. Passed as the third argument to uPlot constructor: new uPlot(options, data, target) A new div target element will be created automatically if none is passed in the props |
onCreate | optional | Callback function, invoked upon uPlot instance creation or recreation |
onDelete | optional | Callback function, invoked before uPlot instance gets destroyed, either because the props has changed so much it's impossible to update the chart or because the component is about to be unmounted |
className/class | optional | A class name passed over to the automatically created target div element. Class name is ignored when the 'target' prop is used. |
resetScales | optional | Flag controlling whether to reset the scales on data change. Defaults to true. |