React-Revact v0.0.4-beta: Full reactivity JS/TS framework. Lightweight replacement of React + MobX + React Router. Very small and fast !!

icon
Latest Release: v0.0.4-beta

Revact npm CircleCI

Lightweight replacement of React + MobX + React Router (I hope in future Angular/Vue), which does not use the virtual DOM comparison, but the re-render of only the changed parts. Abandon the HTML template in favor of their interpretation in JS, give to us tree-shaking is components/templates and the speed of work increases since the time to parse the template is zero.

The library allows you to create quick and responsive interfaces using only JS / TS. With this you will get the minimum application size, speed and ease of development.

OFFICIAL BENCHMARK RESULTS(old name faster-dom)

Usage

import { bootstrap, rValue } from 'revact';

bootstrap('#app', () => {
  const counter = rValue(0)
    return {
      tag: "div",
      textValue: counter,
      listeners: {
        click: () => {
          counter.value +=1
        }
      }
    }
  }
)

? DEMO ? DEMO at StackBlitz

Features

  1. Size - 4.1 kB or 1.38 kB gzipped.
  2. The library rewrites only changes and only when it is necessary.
  3. Performance - going to guarantee 60 fps.
  4. Names of imported functions and classes are not finally and can be discussed.
  5. There is a tree-shaking for components and templates !!!.
  6. Router + Resolver support!

Performance

CODE OF THE TESTS

OFFICIAL BENCHMARK RESULTS(old name faster-dom

How it works

Here will be good api

Motivation

  1. The performance of user interaction and interface speed.
  2. The large size of top frameworks (Angular / React / VueJs).
  3. Implements the component approach of creating interfaces with optimal speed, and the least number of a possible hacks.
  4. The ability of support a tree-shaking in a component's templates.
  5. Component should be splited by a file (template/reactive/listeners).

Current Status

  1. The support of events.
  2. Lifecycle hooks onInit and onDestroy.
  3. The support of inputs.
  4. if condition and for directive.
  5. Reactive classes and attributes bindings.
  6. Supports router

TODO (contributing is appreciated)

  1. Html transpiler (https://github.com/RyuuGan/html2FastDom)

Help me please if you are interested.

Comments

  • build(deps): bump http-proxy from 1.17.0 to 1.18.1
    build(deps): bump http-proxy from 1.17.0 to 1.18.1

    Sep 8, 2020

    Bumps http-proxy from 1.17.0 to 1.18.1.

    Changelog

    Sourced from http-proxy's changelog.

    v1.18.1 - 2020-05-17

    Merged

    1.18.0 - 2019-09-18

    Merged

    Commits

    • [dist] New test fixtures. 7e4a0e5
    • [dist] End of an era. a9b09cc
    • [dist] Version bump. 1.18.0 9bbe486
    • [fix] Latest versions. 59c4403
    • [fix test] Update tests. dd1d08b
    • [dist] Update dependency ws to v3 [SECURITY] b00911c
    • [dist] .gitattributes all the things. fc93520
    • [dist] Regenerate package-lock.json. 16d4f8a
    Commits
    • 9b96cd7 1.18.1
    • 335aeeb Skip sending the proxyReq event when the expect header is present (#1447)
    • dba3966 Remove node6 support, add node12 to build (#1397)
    • 9bbe486 [dist] Version bump. 1.18.0
    • 6e4bef4 Added in auto-changelog module set to keepachangelog format (#1373)
    • d056241 fix 'Modify Response' readme section to avoid unnecessary array copying (#1300)
    • 244303b Fix incorrect target name for reverse proxy example (#1135)
    • b4028ba Fix modify response middleware example (#1139)
    • 77a9815 [dist] Update dependency async to v3 (#1359)
    • c662f9e Fix path to local http-proxy in examples. (#1072)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    Reply
  • build(deps): bump ini from 1.3.5 to 1.3.7
    build(deps): bump ini from 1.3.5 to 1.3.7

    Dec 11, 2020

    Bumps ini from 1.3.5 to 1.3.7.

    Commits
    • c74c8af 1.3.7
    • 024b8b5 update deps, add linting
    • 032fbaf Use Object.create(null) to avoid default object property hazards
    • 2da9039 1.3.6
    • cfea636 better git push script, before publish instead of after
    • 56d2805 do not allow invalid hazardous string as section name
    • See full diff in compare view
    Maintainer changes

    This version was pushed to npm by isaacs, a new releaser for ini since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    Reply
  • build(deps): bump hosted-git-info from 2.7.1 to 2.8.9
    build(deps): bump hosted-git-info from 2.7.1 to 2.8.9

    May 10, 2021

    Bumps hosted-git-info from 2.7.1 to 2.8.9.

    Changelog

    Sourced from hosted-git-info's changelog.

    2.8.9 (2021-04-07)

    Bug Fixes

    2.8.8 (2020-02-29)

    Bug Fixes

    • #61 & #65 addressing issues w/ url.URL implmentation which regressed node 6 support (5038b18), closes #66

    2.8.7 (2020-02-26)

    Bug Fixes

    • Do not attempt to use url.URL when unavailable (2d0bb66), closes #61 #62
    • Do not pass scp-style URLs to the WhatWG url.URL (f2cdfcf), closes #60

    2.8.6 (2020-02-25)

    2.8.5 (2019-10-07)

    Bug Fixes

    • updated pathmatch for gitlab (e8325b5), closes #51
    • updated pathmatch for gitlab (ffe056f)

    2.8.4 (2019-08-12)

    ... (truncated)

    Commits
    • 8d4b369 chore(release): 2.8.9
    • 29adfe5 fix: backport regex fix from #76
    • afeaefd chore(release): 2.8.8
    • 5038b18 fix: #61 & #65 addressing issues w/ url.URL implmentation which regressed nod...
    • 7440afa chore(release): 2.8.7
    • 2d0bb66 fix: Do not attempt to use url.URL when unavailable
    • f2cdfcf fix: Do not pass scp-style URLs to the WhatWG url.URL
    • e1b83df chore(release): 2.8.6
    • ff259a6 Ensure passwords in hosted Git URLs are correctly escaped
    • 624fd6f chore(release): 2.8.5
    • Additional commits viewable in compare view
    Maintainer changes

    This version was pushed to npm by nlf, a new releaser for hosted-git-info since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    Reply
  • build(deps-dev): bump rollup-plugin-serve from 1.0.1 to 1.0.2
    build(deps-dev): bump rollup-plugin-serve from 1.0.1 to 1.0.2

    May 18, 2021

    Bumps rollup-plugin-serve from 1.0.1 to 1.0.2.

    Release notes

    Sourced from rollup-plugin-serve's releases.

    v1.0.2

    Fixed path traversal issue

    Changelog

    Sourced from rollup-plugin-serve's changelog.

    [1.0.2] - 2020-07-17

    Fixed

    • Fix path traversal issue
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    Reply
  • build(deps): bump path-parse from 1.0.6 to 1.0.7
    build(deps): bump path-parse from 1.0.6 to 1.0.7

    Aug 10, 2021

    Bumps path-parse from 1.0.6 to 1.0.7.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    Reply
  • build(deps): bump follow-redirects from 1.7.0 to 1.14.7
    build(deps): bump follow-redirects from 1.7.0 to 1.14.7

    Jan 13, 2022

    Bumps follow-redirects from 1.7.0 to 1.14.7.

    Commits
    • 2ede36d Release version 1.14.7 of the npm package.
    • 8b347cb Drop Cookie header across domains.
    • 6f5029a Release version 1.14.6 of the npm package.
    • af706be Ignore null headers.
    • d01ab7a Release version 1.14.5 of the npm package.
    • 40052ea Make compatible with Node 17.
    • 86f7572 Fix: clear internal timer on request abort to avoid leakage
    • 2e1eaf0 Keep Authorization header on subdomain redirects.
    • 2ad9e82 Carry over Host header on relative redirects (#172)
    • 77e2a58 Release version 1.14.4 of the npm package.
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    Reply
  • Fixed  typo
    Fixed typo

    Mar 25, 2019

                                                                                                                                                                                                           
    Reply
  • Call reInit from root to child deep
    Call reInit from root to child deep

    Mar 23, 2019

    https://github.com/PxyUp/FastDom/blob/b9d063aa4690a20980acde71aa7c13be3172a991/src/generators/node.ts#L83-L88


    This issue was generated by todo based on a TODO comment in b9d063aa4690a20980acde71aa7c13be3172a991. It's been assigned to @PxyUp because they committed the code.
    todo :spiral_notepad: 
    Reply
  • core(fdFor): for optimiztion
    core(fdFor): for optimiztion

    Mar 28, 2019

                                                                                                                                                                                                           
    Reply
  • Call destroy from child to root deep
    Call destroy from child to root deep

    Mar 23, 2019

    https://github.com/PxyUp/FastDom/blob/b9d063aa4690a20980acde71aa7c13be3172a991/src/generators/node.ts#L92-L97


    This issue was generated by todo based on a TODO comment in b9d063aa4690a20980acde71aa7c13be3172a991. It's been assigned to @PxyUp because they committed the code.
    todo :spiral_notepad: 
    Reply
  • Feat: Introduce `bootstrap` function to inject into DOM
    Feat: Introduce `bootstrap` function to inject into DOM

    Mar 30, 2019

    Example usage:

    import { bootstrap } from 'faster-dom';
    import { createMyComponent } from './MyComponent';
    import { MyComponentProps, MyComponentOtherProp } from './types';
    
    bootstrap<[
      MyComponentProps,
      MyComponentOtherProp
    ]>('#root', createMyComponent, { myProp: 'foo' }, 'someOtherProp');
    

    Internally, this will do:

    1. Select the HTMLElement to append to with document.querySelector
    2. Call createMyComponent({ myProp: 'foo' }, 'someOtherProp')
    3. Append the FastDomNode to the HTMLElement

    Reference: #12

    Reply
  • Consider providing the bootstrap instead of having the user do it manually.
    Consider providing the bootstrap instead of having the user do it manually.

    Mar 30, 2019

    From the README:

    import { generateNode } from 'faster-dom';
    import { createTimer } from './timer';
    
    const timerContainer = document.getElementById('timer');
    // create real node element from component
    timerContainer.appendChild(generateNode(createTimer()));
    

    Instead of delegating the bootstrap to the user, maybe it'll be better for the library to take care of it kind of how ReactDOM does it with the render method.

    Example:

    import { bootstrap } from 'faster-dom';
    import { createTimer } from './timer';
    
    bootstrap(createTimer, 'timer')
    

    The bootstrap method could be something like so:

    import { generateNode } from './path/to/file'
    
    export function bootstrap(factory, selector) {
      if (typeof factory !== 'function') {
        throw TypeError('First argument must be a function');
      }
    
      const selectorContainer = document.querySelector(selector);
    
      if (!selectorContainer) {
        throw Error('No container found');
      }
    
      selectorContainer.appendChild(generateNode(factory()))
    }
    
    Reply