Skip to content

Commit 65cc3ba

Browse files
committed
try unmounting react roots for react v18
1 parent 643d444 commit 65cc3ba

File tree

4 files changed

+16
-13
lines changed

4 files changed

+16
-13
lines changed

Gemfile.lock

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ GEM
5151
rack-test (>= 0.6.3)
5252
regexp_parser (>= 1.5, < 3.0)
5353
xpath (~> 3.2)
54-
childprocess (4.1.0)
5554
codeclimate-test-reporter (1.0.9)
5655
simplecov (<= 0.13)
5756
coderay (1.1.3)
@@ -141,10 +140,10 @@ GEM
141140
regexp_parser (2.6.0)
142141
rexml (3.2.5)
143142
rubyzip (2.3.2)
144-
selenium-webdriver (4.1.0)
145-
childprocess (>= 0.5, < 5.0)
143+
selenium-webdriver (4.9.0)
146144
rexml (~> 3.2, >= 3.2.5)
147-
rubyzip (>= 1.2.2)
145+
rubyzip (>= 1.2.2, < 3.0)
146+
websocket (~> 1.0)
148147
shellany (0.0.1)
149148
simplecov (0.13.0)
150149
docile (~> 1.1.0)
@@ -157,10 +156,7 @@ GEM
157156
tilt (2.1.0)
158157
tzinfo (1.2.10)
159158
thread_safe (~> 0.1)
160-
webdrivers (5.2.0)
161-
nokogiri (~> 1.6)
162-
rubyzip (>= 1.3.0)
163-
selenium-webdriver (~> 4.0)
159+
websocket (1.2.9)
164160
xpath (3.2.0)
165161
nokogiri (~> 1.8)
166162
zeitwerk (2.6.6)
@@ -185,7 +181,6 @@ DEPENDENCIES
185181
react-rails!
186182
selenium-webdriver
187183
test-unit (~> 2.5)
188-
webdrivers
189184

190185
BUNDLED WITH
191186
2.4.9

react-rails.gemspec

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ Gem::Specification.new do |s|
2424
s.add_development_dependency 'guard-minitest'
2525
s.add_development_dependency 'jbuilder'
2626
s.add_development_dependency 'listen', '~> 3.0.0'
27-
s.add_development_dependency 'webdrivers'
2827
s.add_development_dependency 'capybara'
2928
s.add_development_dependency 'selenium-webdriver'
3029
s.add_development_dependency 'test-unit', '~> 2.5'

react_ujs/index.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ var ReactRailsUJS = {
3030
jQuery: (typeof window !== 'undefined') && (typeof window.jQuery !== 'undefined') && window.jQuery,
3131

3232
components: {},
33+
roots: [],
3334

3435
// helper method for the mount and unmount methods to find the
3536
// `data-react-class` DOM elements
@@ -131,6 +132,7 @@ var ReactRailsUJS = {
131132
} else {
132133
const root = createReactRootLike(node)
133134
component = root.render(component);
135+
this.roots.push({"node": node, "root": root}) = if ReactDOM.createRoot
134136
}
135137
}
136138
}
@@ -143,7 +145,7 @@ var ReactRailsUJS = {
143145

144146
for (var i = 0; i < nodes.length; ++i) {
145147
var node = nodes[i];
146-
ReactDOM.unmountComponentAtNode(node);
148+
ReactDOM.createRoot ? this.unmountRoot(node) : ReactDOM.unmountComponentAtNode(node);
147149
}
148150
},
149151

@@ -155,6 +157,15 @@ var ReactRailsUJS = {
155157
detectEvents(this)
156158
},
157159

160+
unmountRoot: function(node) {
161+
var targetRoots = this.roots.filter(function(rootElement) {return rootElement["node"] && (rootElement["node"] === node)})
162+
targetRoots.forEach(function(rootElement) {
163+
rootElement["root"].unmount();
164+
rootElement["root"] = null;
165+
rootElement["node"] = null;
166+
return undefined;
167+
});
168+
}
158169
}
159170

160171
// These stable references are so that handlers can be added and removed:
@@ -170,7 +181,6 @@ ReactRailsUJS.handleUnmount = function(e) {
170181
if (e && e.target) {
171182
target = e.target;
172183
}
173-
ReactRailsUJS.unmountComponents(target);
174184
}
175185

176186

test/react/server_rendering/bundle_renderer_test.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,6 @@ class BundleRendererTest < ActiveSupport::TestCase
126126
result = @renderer.render("Todo", { todo: "write tests" }, nil)
127127

128128
assert_match(%r{<li.*write tests</li>}, result)
129-
assert_match(/data-reactroot/, result)
130129
ensure
131130
Rails.application.config.assets.compile = true
132131

0 commit comments

Comments
 (0)