Giter Club home page Giter Club logo

uplot-wrappers's Introduction

uPlot wrappers

A collection of uPlot wrappers that allow you to work with charts declaratively inside your favorite framework.

Table of Contents

Motivation

While several other uPlot wrappers already exist, all of them have one of the following limitations:

  1. They create uPlot instance once, during component mount phase, and expect you to handle all the update logic yourself.
  2. They recreate uPlot instance anew whenever the props change, even if the instance can be updated to reflect the changes.

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.

Getting started

See React or Vue.js sections below depending on what framework you're using. Also see API documentation common to both frameworks.

React

Installation

Install uplot-react package with uplot dependency:

  • Using npm: $ npm install uplot-react uplot
  • Using yarn: $ yarn add uplot-react uplot

You also need React 16.8 or above to be installed inside your project tree.

How to use

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) => {}}
    />);

Demo

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

Vue.js

Installation

Install uplot-vue package with uplot dependency:

  • Using npm: $ npm install uplot-vue uplot
  • Using yarn: $ 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).

How to use

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.

Demo

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

Documentation

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 or init function 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
resetScales optional Flag controlling whether to reset the scales on data change. Defaults to true.

uplot-wrappers's People

Contributors

skalinichev avatar ignusg avatar phlmn avatar ruisheng95 avatar rand0mc0d3r avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.