         on_key_up     : rtypes.func
         exclusions    : rtypes.array
 
+    update_soon: ->
+        do_update = => redux.getActions('projects').fetch_directory_tree(@props.project_id, exclusions:@props.exclusions)
+        # This must happen in a later render loop, since fetch_directory_tree will change state, and you should not
+        # change state in a render method (this is called below).
+        setTimeout(do_update, 1)
+
     render: ->
         x = @props.directory_trees?.get(@props.project_id)?.toJS()
         if not x? or new Date() - x.updated >= 15000
-            redux.getActions('projects').fetch_directory_tree(@props.project_id, exclusions:@props.exclusions)
+            @update_soon()
         tree = x?.tree
         if tree?
             group = (s) ->

            onChange     = {@props.on_change}
        />

# NOTE: This component does *NOT* all the update_directory_tree action.  That is currently necessary
# to update the tree as of July 31, 2015, though when there is a sync'd filetree it won't be.
exports.DirectoryInput = rclass
    displayName : 'DirectoryInput'

            return <span><Space/> (<exports.TimeAgo date={time} />)</span>

    render: ->
        s = COMPUTE_STATES[@props.state?.get?('state')]
        if not s?
            return <Loading />
