Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@johnnywang/reactive

Package Overview
Dependencies
Maintainers
1
Versions
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@johnnywang/reactive

Tiny reactive data handler for javascript based on Vuejs

  • 0.0.1
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
0
decreased by-100%
Maintainers
1
Weekly downloads
 
Created
Source

Reactive

Tiny reactive data handler for javascript based on Vuejs.

Currently not handle with array issue, such as push, pop...etc.

Warn: logic in this plugin may not be exact how Vuejs does.

Install

Use npm or yarn to install

$ npm install reactive
$ yarn add reactive

Use browser script include, will be set as window.Reactive.

<script src="./dist/reactive.min.js"></script>

Usage

Quick Use:

import Reactive from '@johnnywang/reactive';

const reactive = new Reactive({
  data: {
    name: 'Johnny',
    age: 30,
  },
  watch: {
    name() {
      console.log('name changed!');
    },
  },
});

reactive.name = 'Kevin';
// name changed!

Options detail

data
  • type: Object
  • create a reactive object with getter/setter
  • access by reactive of its $data property.
computed
  • type: Object
  • collection of computed property that will be set to data
  • now only support getter

DEMO: watch for computed property:

const reactive = new Reactive({
  data: {
    name: 'Johnny',
    age: 30,
  },
  computed: {
    info() {
      return this.name + ' ' + this.age;
    },
  },
  watch: {
    info() {
      console.log('info changed!');
    },
  },
});

reactive.name = 'Kevin';
// info changed

or create computed property to reactive object by functional calling.

  • $computed(key, getter);
  • key: String
  • getter: Function
// here must not be an arrow function, wouldnt get correct this
reactive.computed('info', function() {
  return this.name + ' ' + this.age;
});

watch

watch a property when it is changed. can watch both computed or data,

but could only watch first level, if need for watch nested object.

use the functional version $watch by reactive object.

  • $watch(target, key, effect);
  • target: String or reactive object
  • key: String
  • effect: Function
const reactive = new Reactive({
  data: {
    info: {
      name: 'Johnny',
      age: 30,
    },
    a: {
      b: {
        c: {
          d: 'd'
        }
      }
    }
  },
};

// nested structure from $data
reactive.$watch('a.b.c', 'd', () => /* ... */);

reactive.$watch('info', 'name', () => /* ... */);
// same as(if not string, should be a reactive data object)
reactive.$watch(reactive.$data.info, 'name', () => /* ... */);

lifeCycle

Only two hooks here as beforeCreate & created

const reactive = new Reactive({
  watch: {
    height() {
      console.log('height changed');
    }
  },
  beforeCreate() {
    // you can changed any options by this.$options
    // before creating the reactive object
    this.$options.data.height = 3000;
  },
  created() {
    // you can use any data inside reactive by this
    this.height = 1000;
  },
})

set

if need to add new reactive property, use $set to add it into $data, it'll auto proxy it into reactive object too.

be awared that you can not use a property inside computed if it's not yet created, it'll show undefined.

  • $set(key, value);

    • key: String
    • value: any
reactive.$set('name', 'Kevin');

FAQs

Package last updated on 18 Sep 2020

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc