Skip to content

Commit d1f038c

Browse files
committed
support react 19
1 parent 9ab7970 commit d1f038c

3 files changed

Lines changed: 88 additions & 12 deletions

File tree

dash/_dash_renderer.py

Lines changed: 38 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33

44
__version__ = "3.0.0"
55

6-
_available_react_versions = {"18.3.1", "18.2.0", "16.14.0"}
7-
_available_reactdom_versions = {"18.3.1", "18.2.0", "16.14.0"}
6+
_available_react_versions = {"18.3.1", "18.2.0", "19.2.0"}
7+
_available_reactdom_versions = {"18.3.1", "18.2.0", "19.2.0"}
88
_js_dist_dependencies: List[Dict[str, Any]] = [] # to be set by _set_react_version
99

1010

@@ -19,19 +19,51 @@ def _set_react_version(v_react, v_reactdom=None):
1919
assert v_react in _available_react_versions, react_err
2020
assert v_reactdom in _available_reactdom_versions, reactdom_err
2121

22+
# React 19+ removed UMD builds, use umd-react package instead
23+
is_react19 = v_react.startswith("19.")
24+
is_reactdom19 = v_reactdom.startswith("19.")
25+
26+
if is_react19:
27+
react_prod_url = (
28+
f"https://unpkg.com/umd-react@{v_react}/dist/react.production.min.js"
29+
)
30+
react_dev_url = (
31+
f"https://unpkg.com/umd-react@{v_react}/dist/react.development.js"
32+
)
33+
else:
34+
react_prod_url = (
35+
f"https://unpkg.com/react@{v_react}/umd/react.production.min.js"
36+
)
37+
react_dev_url = f"https://unpkg.com/react@{v_react}/umd/react.development.js"
38+
39+
if is_reactdom19:
40+
reactdom_prod_url = (
41+
f"https://unpkg.com/umd-react@{v_reactdom}/dist/react-dom.production.min.js"
42+
)
43+
reactdom_dev_url = (
44+
f"https://unpkg.com/umd-react@{v_reactdom}/dist/react-dom.development.js"
45+
)
46+
else:
47+
reactdom_prod_url = (
48+
f"https://unpkg.com/react-dom@{v_reactdom}/umd/react-dom.production.min.js"
49+
)
50+
reactdom_dev_url = (
51+
f"https://unpkg.com/react-dom@{v_reactdom}/umd/react-dom.development.js"
52+
)
53+
2254
_js_dist_dependencies[:] = [
2355
{
2456
"external_url": {
2557
"prod": [
2658
"https://unpkg.com/@babel/polyfill@7.12.1/dist/polyfill.min.js",
27-
f"https://unpkg.com/react@{v_react}/umd/react.production.min.js",
28-
f"https://unpkg.com/react-dom@{v_reactdom}/umd/react-dom.production.min.js",
59+
react_prod_url,
60+
reactdom_prod_url,
2961
"https://unpkg.com/prop-types@15.8.1/prop-types.min.js",
3062
],
3163
"dev": [
3264
"https://unpkg.com/@babel/polyfill@7.12.1/dist/polyfill.min.js",
33-
f"https://unpkg.com/react@{v_react}/umd/react.development.js",
34-
f"https://unpkg.com/react-dom@{v_reactdom}/umd/react-dom.development.js",
65+
react_dev_url,
66+
reactdom_dev_url,
3567
"https://unpkg.com/prop-types@15.8.1/prop-types.js",
3668
],
3769
},

dash/dash-renderer/init.template

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,51 @@ def _set_react_version(v_react, v_reactdom=None):
1919
assert v_react in _available_react_versions, react_err
2020
assert v_reactdom in _available_reactdom_versions, reactdom_err
2121

22+
# React 19+ removed UMD builds, use umd-react package instead
23+
is_react19 = v_react.startswith("19.")
24+
is_reactdom19 = v_reactdom.startswith("19.")
25+
26+
if is_react19:
27+
react_prod_url = (
28+
f"https://unpkg.com/umd-react@{v_react}/dist/react.production.min.js"
29+
)
30+
react_dev_url = (
31+
f"https://unpkg.com/umd-react@{v_react}/dist/react.development.js"
32+
)
33+
else:
34+
react_prod_url = (
35+
f"https://unpkg.com/react@{v_react}/umd/react.production.min.js"
36+
)
37+
react_dev_url = f"https://unpkg.com/react@{v_react}/umd/react.development.js"
38+
39+
if is_reactdom19:
40+
reactdom_prod_url = (
41+
f"https://unpkg.com/umd-react@{v_reactdom}/dist/react-dom.production.min.js"
42+
)
43+
reactdom_dev_url = (
44+
f"https://unpkg.com/umd-react@{v_reactdom}/dist/react-dom.development.js"
45+
)
46+
else:
47+
reactdom_prod_url = (
48+
f"https://unpkg.com/react-dom@{v_reactdom}/umd/react-dom.production.min.js"
49+
)
50+
reactdom_dev_url = (
51+
f"https://unpkg.com/react-dom@{v_reactdom}/umd/react-dom.development.js"
52+
)
53+
2254
_js_dist_dependencies[:] = [
2355
{
2456
"external_url": {
2557
"prod": [
2658
"https://unpkg.com/@babel/polyfill@$polyfill/dist/polyfill.min.js",
27-
f"https://unpkg.com/react@{v_react}/umd/react.production.min.js",
28-
f"https://unpkg.com/react-dom@{v_reactdom}/umd/react-dom.production.min.js",
59+
react_prod_url,
60+
reactdom_prod_url,
2961
"https://unpkg.com/prop-types@$proptypes/prop-types.min.js",
3062
],
3163
"dev": [
3264
"https://unpkg.com/@babel/polyfill@$polyfill/dist/polyfill.min.js",
33-
f"https://unpkg.com/react@{v_react}/umd/react.development.js",
34-
f"https://unpkg.com/react-dom@{v_reactdom}/umd/react-dom.development.js",
65+
react_dev_url,
66+
reactdom_dev_url,
3567
"https://unpkg.com/prop-types@$proptypes/prop-types.js",
3668
],
3769
},

dash/development/build_process.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,19 @@ def bundles(self, build=None): # pylint:disable=too-many-locals
143143
versions[f"extra_{name_squashed}_versions"] = f'"{extras_str}"'
144144

145145
for extra_version in extras:
146-
url = f"https://unpkg.com/{name}@{extra_version}/umd/{filename}"
146+
# React 19+ removed UMD builds, use umd-react package instead
147+
if name in ("react", "react-dom") and extra_version.startswith("19."):
148+
# Map filename to umd-react dist path
149+
if "production.min" in filename:
150+
umd_filename = f"{name}.production.min.js"
151+
elif "development" in filename:
152+
umd_filename = f"{name}.development.js"
153+
else:
154+
umd_filename = filename
155+
url = f"https://unpkg.com/umd-react@{extra_version}/dist/{umd_filename}"
156+
else:
157+
url = f"https://unpkg.com/{name}@{extra_version}/umd/{filename}"
158+
147159
res = requests.get(url)
148160
extra_target = f"{name}@{extra_version}.{ext}"
149161
extra_path = self._concat(self.deps_folder, extra_target)
@@ -169,7 +181,7 @@ def __init__(self):
169181
"""dash-renderer's path is binding with the dash folder hierarchy."""
170182
extras = [
171183
"18.2.0",
172-
"16.14.0",
184+
"19.2.0",
173185
] # versions to include beyond what's in package.json
174186
super().__init__(
175187
self._concat(os.path.dirname(__file__), os.pardir, "dash-renderer"),

0 commit comments

Comments
 (0)