                 @_props[propName].get()
 
         # Set up @reactives
-        @_reactiveComps = {} # nonDictReactiveName: computation
-        @reactives = {} # reactiveName: reactiveVar|J.AutoDict
+        @reactives = {} # reactiveName: autoVar
         for reactiveName, reactiveSpec of componentSpec.reactives ? {}
-            if reactiveSpec.val?
-                # AutoDicts get initialized later because they
-                # immediately want to run their keyFunc.
-                @reactives[reactiveName] = new ReactiveVar undefined,
-                    reactiveSpec.same ? J.util.equals
+            @reactives[reactiveName] = J.AutoVar(
+                reactiveSpec.val.bind @
+                reactiveSpec.onChange ? null
+                reactiveSpec.same ? J.util.equals
+            )
 
         # Set up @state
         initialState = {}

            renderedComponent = componentSpec.render.apply @

        @_renderComp.onInvalidate (c) =>
            unless c.stopped
                @_renderComp.stop()

                Tracker.afterFlush =>
                    # The component may have unmounted
                    return unless @isMounted()

                    # Between c's invalidation time and now, the component may
                    # have been re-rendered at time (1) - see comment above - in
                    # which case there would be a new @_renderComp
                    return unless c is @_renderComp

                    @_renderComp = null
                    @forceUpdate()

        renderedComponent


            @_renderComp.stop()
            @_renderComp = null

        for reactiveName, autoVar of @reactives
            autoVar.stop()

        componentSpec.componentWillUnmount?.apply @


    reactSpec.render = ->
        ###
            There are three times at which a component may be re-rendered:

