Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
  <script type="importmap">
    {
      "imports": {
        "signal-polyfill": "https://esm.sh/*signal-polyfill",
        "signal-utils": "https://esm.sh/*signal-utils",       
        "signal-utils/": "https://esm.sh/*signal-utils/"        
      }
    }
  </script>
  <script type="module">
    import { Signal } from "signal-polyfill";
    import { effect } from "signal-utils/subtle/microtask-effect";
    
    let el = {
      out: document.querySelector('output'),
      button: document.querySelector('button'),
    };
   
    let count = new Signal.State(0);
    
    function increment() {
      let nextValue = count.get() + 1;
      count.set(nextValue);
    }
    
    /**
     Note: as an app-dev you typically don't want effects
           derived data is more performant 
           (for the average effect implementation)
           (some effect implementations are synchronous and more performant)
    
     Note: this is a memory leak due to the general nature of 
           signals aiming to be for everyone, we don't have an owner 
           or lifetime setup so we have no way to cleanup / unwatch effects.
           (something that's normally handled for you by a framework)
     */
    effect(() => {
      el.out.innerText = count.get();
     });
    
    el.button.addEventListener('click', increment);
    
  </script>
</head>
<body>
  <div id="app">
    Count: <output></output>
    <br>
    <button>Increment</button>
  </div>
</body>
</html>
Output 300px

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
NullVoxPopulipro
0viewers