Skip to content

Commit 8937c5f

Browse files
add some comments
1 parent f6af606 commit 8937c5f

File tree

1 file changed

+42
-5
lines changed

1 file changed

+42
-5
lines changed

lib/react_on_rails/helper.rb

+42-5
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,49 @@ def react_component(component_name, options = {})
9191
end
9292
end
9393

94+
# Streams a server-side rendered React component using React's `renderToPipeableStream`.
95+
# Supports React 18 features like Suspense, concurrent rendering, and selective hydration.
96+
# Enables progressive rendering and improved performance for large components.
97+
#
98+
# Note: This function can only be used with React on Rails Pro.
99+
# The view that uses this function must be rendered using the
100+
# `stream_view_containing_react_components` method from the React on Rails Pro gem.
101+
#
102+
# Example of an async React component that can benefit from streaming:
103+
#
104+
# const AsyncComponent = async () => {
105+
# const data = await fetchData();
106+
# return <div>{data}</div>;
107+
# };
108+
#
109+
# function App() {
110+
# return (
111+
# <Suspense fallback={<div>Loading...</div>}>
112+
# <AsyncComponent />
113+
# </Suspense>
114+
# );
115+
# }
116+
#
117+
# @param [String] component_name Name of your registered component
118+
# @param [Hash] options Options for rendering
119+
# @option options [Hash] :props Props to pass to the react component
120+
# @option options [String] :dom_id DOM ID of the component container
121+
# @option options [Hash] :html_options Options passed to content_tag
122+
# @option options [Boolean] :prerender Set to false to disable server-side rendering
123+
# @option options [Boolean] :trace Set to true to add extra debugging information to the HTML
124+
# @option options [Boolean] :raise_on_prerender_error Set to true to raise exceptions during server-side rendering
125+
# Any other options are passed to the content tag, including the id.
94126
def stream_react_component(component_name, options = {})
127+
unless ReactOnRails::Utils.react_on_rails_pro?
128+
raise ReactOnRails::Error,
129+
"You must use React on Rails Pro to use the stream_react_component method."
130+
end
131+
132+
if @rorp_rendering_fibers.nil?
133+
raise ReactOnRails::Error,
134+
"You must call stream_view_containing_react_components to render the view containing the react component"
135+
end
136+
95137
rendering_fiber = Fiber.new do
96138
stream = internal_stream_react_component(component_name, options)
97139
stream.each_chunk do |chunk|
@@ -100,11 +142,6 @@ def stream_react_component(component_name, options = {})
100142
Fiber.yield nil
101143
end
102144

103-
if @rorp_rendering_fibers.nil?
104-
raise ReactOnRails::Error,
105-
"You must call stream_view_containing_react_components to render the view containing the react component"
106-
end
107-
108145
@rorp_rendering_fibers << rendering_fiber
109146

110147
# return the first chunk of the fiber

0 commit comments

Comments
 (0)