1.2.3 • Published 4 years ago

@matejsvajger/reactive-object v1.2.3

Weekly downloads
7
License
MIT
Repository
github
Last release
4 years ago

reactive-object

Latest Stable Version Codecov Build status dependencies Status NPM Downloads npm bundle size NPM License

Simple lightweight reactive object in vanilla js

Useful when you need to quickly drop in some simple reactivity.

DEMO

Installation

Yarn || NPM

$ yarn add @matejsvajger/reactive-object
$ npm i @matejsvajger/reactive-object --save

CDN

<script src="https://unpkg.com/@matejsvajger/reactive-object@1.2.3/dist/reactive.umd.js"></script>

Usage

import Reactive from '@matejsvajger/reactive-object'

const toMonetaryString = num => `${num.toFixed(2).replace('.', ',')} €`
const updateElementById = id => html => document.getElementById(id).innerHTML = html
const getTax = (price, tax) =>
  toMonetaryString(price - (price * 100) / (100 + tax)) +
  ` - <small>${tax}%</small>`

const product = new Reactive({
  qty: 2,
  price: 15,
  // computed props
  shipping: ({ qty }) => (qty > 0 ? 5 : 0),
  total: ({ qty, price, shipping }) => qty * price + shipping
})

// assign multiple formatters
product.format({
  total: toMonetaryString,
  shipping: toMonetaryString
})
// or add single
product.format('price', toMonetaryString)

// assign multiple observers
product.observe({
  price: updateElementById('price'),
  total: updateElementById('total'),
  shipping: updateElementById('shipping')
})
// or add single
product.observe('qty', updateElementById('qty'))

// or register a new prop and set it
product.observe('tax', updateElementById('tax'))
product.format('tax', (tax, { total }) => getTax(total, tax))
product.tax = () => 21

console.log(product.qty) // 2
console.log(product.price) // "15,00 €"
console.log(product.total) // "35,00 €"
product.price = 20;
console.log(product.price) // "20,00 €"
console.log(product.total) // "45,00 €"
1.2.3

4 years ago

1.2.1

4 years ago

1.1.0

4 years ago

1.0.5

4 years ago

1.0.4

4 years ago

1.0.3

4 years ago

1.0.2

4 years ago