Coder Social home page Coder Social logo

set-state! on already deleted node about om HOT 5 CLOSED

omcljs avatar omcljs commented on August 16, 2024
set-state! on already deleted node

from om.

Comments (5)

swannodette avatar swannodette commented on August 16, 2024

Thanks for the report. Can you please produce a complete minimal example so we can easily reproduce? Thank you!

from om.

thheller avatar thheller commented on August 16, 2024

I had similar moments before, not in Om though, but the issue at hand is that first the event dom/a on-delete is fired which deletes the item and then bubbles up to dom/li on-mark, your fix is pretty much the way to go here.

Don't think its an issue with Om, apart from maybe warning about "dead" components.

from om.

ivo- avatar ivo- commented on August 16, 2024

This is the simplest code I was able to reach reproducing the problem. I hope it helps.

(ns om-examples.events
  (:require [om.core :as om :include-macros true]
            [om.dom :as dom :include-macros true]))

(defn on-delete [e item items]
  (.log js/console js/arguments)
  (om/update! items #(vec (remove #{(om/value item)} %))))

(defn item [item node items]
  (om/component
    (dom/li nil
      (dom/a #js {:onClick (om/bind on-delete item items)}))))

(defn app [cursor node]
  (reify
    om/IDidMount
    (did-mount [_ _]
      (let [links (.call (.-slice js/Array.prototype)
                    (.getElementsByTagName js/document "a"))]
        (doseq [l links] (.click l))))
    om/IRender
    (render [_]
      (dom/section nil
        (om/build-all item (:items cursor)
          {:opts (:items cursor)})))))

(om/root {:items [[1] [2] [3]]} app js/document.body)

Here is the output using [om "0.1.4"]:

[SyntheticMouseEvent, om.core.IndexedCursor, om.core.IndexedCursor]
[SyntheticMouseEvent, om.core.IndexedCursor, om.core.IndexedCursor]
[SyntheticMouseEvent, null, om.core.IndexedCursor]
Uncaught Error: No protocol method ICursor.-value defined for type null:  

from om.

swannodette avatar swannodette commented on August 16, 2024

Thanks much, will take a look and see if this something we actually need to address.

from om.

swannodette avatar swannodette commented on August 16, 2024

This is definitely not an Om bug. There are many cases where this could occur because of concurrency, you need to recheck your assumptions in your event handler before acting.

from om.

Related Issues (20)

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.