File tree Expand file tree Collapse file tree 3 files changed +35
-1
lines changed
Expand file tree Collapse file tree 3 files changed +35
-1
lines changed Original file line number Diff line number Diff line change @@ -189,6 +189,9 @@ MyApp::Application.configure do
189189 files: [" server_rendering.js" ], # files to load for prerendering
190190 replay_console: true , # if true, console.* will be replayed client-side
191191 }
192+ # Changing files matching these dirs/exts will cause the server renderer to reload:
193+ config.react.server_renderer_extensions = [" jsx" ]
194+ config.react.server_renderer_directories = [" /app/assets/javascripts" ]
192195end
193196```
194197
Original file line number Diff line number Diff line change @@ -17,12 +17,22 @@ class Railtie < ::Rails::Railtie
1717 config . react . server_renderer_timeout = 20 # seconds
1818 config . react . server_renderer = nil # defaults to SprocketsRenderer
1919 config . react . server_renderer_options = { } # SprocketsRenderer provides defaults
20+ # Changing files with these extensions in these directories will cause the server renderer to reload:
21+ config . react . server_renderer_directories = [ "/app/assets/javascripts/" ]
22+ config . react . server_renderer_extensions = [ "jsx" ]
2023 # View helper implementation:
2124 config . react . view_helper_implementation = nil # Defaults to ComponentMount
2225
2326 # Watch .jsx files for changes in dev, so we can reload the JS VMs with the new JS code.
2427 initializer "react_rails.add_watchable_files" , group : :all do |app |
25- app . config . watchable_files . concat Dir [ "#{ app . root } /app/assets/javascripts/**/*.jsx*" ]
28+ reload_paths = config . react . server_renderer_directories . reduce ( { } ) do |memo , dir |
29+ app_dir = File . join ( app . root , dir )
30+ memo [ app_dir ] = config . react . server_renderer_extensions
31+ memo
32+ end
33+ app . reloaders << ActiveSupport ::FileUpdateChecker . new ( [ ] , reload_paths ) do
34+ React ::ServerRendering . reset_pool
35+ end
2636 end
2737
2838 # Include the react-rails view helper lazily
Original file line number Diff line number Diff line change @@ -37,6 +37,27 @@ def wait_to_ensure_asset_pipeline_detects_changes
3737 end
3838 end
3939
40+ test 'it reloads when new jsx files are added' do
41+ begin
42+ get '/server/1'
43+ refute_match ( /Overwritten List/ , response . body )
44+
45+ # Make it alphabetically last so it will override the preceeding one:
46+ new_file_path = File . expand_path ( '../dummy/app/assets/javascripts/components/ZZ_NewComponent.js.jsx' , __FILE__ )
47+ File . write new_file_path , <<-JS
48+ var TodoList = function() { return <span>"Overwritten List"</span> }
49+ JS
50+
51+ wait_to_ensure_asset_pipeline_detects_changes
52+
53+ get '/server/1'
54+ assert_match ( /Overwritten List/ , response . body )
55+ ensure
56+ FileUtils . rm_rf ( new_file_path )
57+ wait_to_ensure_asset_pipeline_detects_changes
58+ end
59+ end
60+
4061 test 'react server rendering shows console output as html comment' do
4162 # Make sure console messages are replayed when requested
4263 get '/server/console_example'
You can’t perform that action at this time.
0 commit comments