Skip to content

Commit 9d9c41e

Browse files
committed
Merge pull request #92 from rmosolgo/prerender-errors
Raise any JS error when prerendering
2 parents 81d423e + fa1d062 commit 9d9c41e

File tree

2 files changed

+16
-6
lines changed

2 files changed

+16
-6
lines changed

lib/react/renderer.rb

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,13 @@
33
module React
44
class Renderer
55

6+
class PrerenderError < RuntimeError
7+
def initialize(component_name, props, js_message)
8+
message = "Encountered error \"#{js_message}\" when prerendering #{component_name} with #{props.to_json}"
9+
super(message)
10+
end
11+
end
12+
613
cattr_accessor :pool
714

815
def self.setup!(react_js, components_js, args={})
@@ -58,13 +65,8 @@ def render(component, args={})
5865
}()
5966
JS
6067
context.eval(jscode).html_safe
61-
# What should be done here? If we are server rendering, and encounter an error in the JS code,
62-
# then log it and continue, which will just render the react ujs tag, and when the browser tries
63-
# to render the component it will most likely encounter the same error and throw to the browser
64-
# console for a better debugging experience.
6568
rescue ExecJS::ProgramError => e
66-
::Rails.logger.error "[React::Renderer] #{e.message}"
69+
raise PrerenderError.new(component, args, e)
6770
end
68-
6971
end
7072
end

test/react_renderer_test.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,12 @@ class ReactRendererTest < ActiveSupport::TestCase
1515
end
1616
end
1717
end
18+
19+
test 'prerender errors are thrown' do
20+
err = assert_raises React::Renderer::PrerenderError do
21+
React::Renderer.render("NonexistentComponent", {error: true, exists: false})
22+
end
23+
expected_message = 'Encountered error "ReferenceError: NonexistentComponent is not defined" when prerendering NonexistentComponent with {"error":true,"exists":false}'
24+
assert_equal expected_message, err.message
25+
end
1826
end

0 commit comments

Comments
 (0)