           (st/emit! (dwc/stop-picker))
           (modal/disallow-click-outside!))]
 
-    (mf/use-effect
+    (mf/use-layout-effect
      ;; Everytime we finish retrieving a new URL we redraw the canvas
      ;; so even if we're not finished the user can start to pick basic
      ;; shapes
-     (mf/deps fetch-pending)
+     (mf/deps props fetch-pending)
      (fn []
        (try
-         (timers/raf
+         (timers/schedule 100
           #(let [svg-node (mf/ref-val svg-ref)
                  canvas-node (mf/ref-val canvas-ref)
                  canvas-context (.getContext canvas-node "2d")

       [:& pixel-picker-overlay {:vport vport
                                 :vbox vbox
                                 :viewport-ref viewport-ref
                                 :options options}])

     [:svg.viewport
      {:preserveAspectRatio "xMidYMid meet"

        (fn [event]
          (dom/prevent-default event)
          (cond
            (dnd/has-type? event "app/shape")
            (let [shape (dnd/get-data event "app/shape")
                  point (gpt/point (.-clientX event) (.-clientY event))
