Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix next/image usage of onError() #36305

Merged
merged 6 commits into from Apr 22, 2022

Conversation

shinkj11
Copy link
Contributor

@shinkj11 shinkj11 commented Apr 20, 2022

History

In PR #35889, onError prop was added explicitly on the Image component, but it was ommitted from the ImageElement component. In result, the callback didn't work at all.

Now

This PR deletes the onError prop from explicitly defined props. Explicitly adding onError on the const imgElementArgs is considered, but deleting the defined prop from Image is more reasonable because the prop isn't used in Image component.

Bug

  • Related issues linked using fixes #number
  • Integration tests added
  • Errors have helpful link attached, see contributing.md

@shinkj11 shinkj11 changed the title Update image.tsx Fix onError omission of Image Apr 20, 2022
Copy link
Member

@styfle styfle left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the PR!

Looks like this is similar to the onLoad() bug that was fixed in #36176

Let's add a similar test here for onError() to make sure its working properly.

@shinkj11
Copy link
Contributor Author

Tests are added. I can't find the way to fire error event except for using invalid src path. If there's any other error firing situation, I'll added to the cases.

@ijjk
Copy link
Member

ijjk commented Apr 22, 2022

Stats from current PR

Default Build (Decrease detected ✓)
General Overall decrease ✓
vercel/next.js canary shinkj11/next-js-official bugfix/image-onerror-fix Change
buildDuration 15.6s 15.7s ⚠️ +92ms
buildDurationCached 6.1s 6.1s -82ms
nodeModulesSize 481 MB 481 MB -67 B
Page Load Tests Overall decrease ⚠️
vercel/next.js canary shinkj11/next-js-official bugfix/image-onerror-fix Change
/ failed reqs 0 0
/ total time (seconds) 3.17 3.197 ⚠️ +0.03
/ avg req/sec 788.54 782.06 ⚠️ -6.48
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.362 1.358 0
/error-in-render avg req/sec 1836.03 1840.47 +4.44
Client Bundles (main, webpack)
vercel/next.js canary shinkj11/next-js-official bugfix/image-onerror-fix Change
925.HASH.js gzip 179 B 179 B
framework-HASH.js gzip 42 kB 42 kB
main-HASH.js gzip 28.6 kB 28.6 kB
webpack-HASH.js gzip 1.44 kB 1.44 kB
Overall change 72.3 kB 72.3 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary shinkj11/next-js-official bugfix/image-onerror-fix Change
polyfills-HASH.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages Overall decrease ✓
vercel/next.js canary shinkj11/next-js-official bugfix/image-onerror-fix Change
_app-HASH.js gzip 1.36 kB 1.36 kB
_error-HASH.js gzip 192 B 192 B
amp-HASH.js gzip 309 B 309 B
css-HASH.js gzip 327 B 327 B
dynamic-HASH.js gzip 3.04 kB 3.04 kB
head-HASH.js gzip 351 B 351 B
hooks-HASH.js gzip 920 B 920 B
image-HASH.js gzip 5.74 kB 5.73 kB -8 B
index-HASH.js gzip 263 B 263 B
link-HASH.js gzip 2.36 kB 2.36 kB
routerDirect..HASH.js gzip 320 B 320 B
script-HASH.js gzip 392 B 392 B
withRouter-HASH.js gzip 319 B 319 B
85e02e95b279..7e3.css gzip 107 B 107 B
Overall change 16 kB 16 kB -8 B
Client Build Manifests
vercel/next.js canary shinkj11/next-js-official bugfix/image-onerror-fix Change
_buildManifest.js gzip 461 B 461 B
Overall change 461 B 461 B
Rendered Page Sizes
vercel/next.js canary shinkj11/next-js-official bugfix/image-onerror-fix Change
index.html gzip 531 B 531 B
link.html gzip 544 B 544 B
withRouter.html gzip 525 B 525 B
Overall change 1.6 kB 1.6 kB

Diffs

Diff for _buildManifest.js
@@ -12,7 +12,7 @@ self.__BUILD_MANIFEST = {
   ],
   "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-96a5d6ed07cf5a83.js"],
   "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-9dfe734f583d4926.js"],
-  "/image": ["static\u002Fchunks\u002Fpages\u002Fimage-9a0a6e890d6a266a.js"],
+  "/image": ["static\u002Fchunks\u002Fpages\u002Fimage-4ebd299a1253d245.js"],
   "/link": ["static\u002Fchunks\u002Fpages\u002Flink-c605640c895e01ab.js"],
   "/routerDirect": [
     "static\u002Fchunks\u002Fpages\u002FrouterDirect-98eb70bf22fb21da.js"
Diff for image-HASH.js
@@ -149,7 +149,6 @@
           objectFit = _param.objectFit,
           objectPosition = _param.objectPosition,
           onLoadingComplete = _param.onLoadingComplete,
-          onError = _param.onError,
           _placeholder = _param.placeholder,
           placeholder = _placeholder === void 0 ? "empty" : _placeholder,
           blurDataURL = _param.blurDataURL,
@@ -169,7 +168,6 @@
             "objectFit",
             "objectPosition",
             "onLoadingComplete",
-            "onError",
             "placeholder",
             "blurDataURL"
           ]);

Default Build with SWC (Decrease detected ✓)
General Overall decrease ✓
vercel/next.js canary shinkj11/next-js-official bugfix/image-onerror-fix Change
buildDuration 17.6s 18s ⚠️ +433ms
buildDurationCached 6.1s 6.2s ⚠️ +27ms
nodeModulesSize 481 MB 481 MB -67 B
Page Load Tests Overall increase ✓
vercel/next.js canary shinkj11/next-js-official bugfix/image-onerror-fix Change
/ failed reqs 0 0
/ total time (seconds) 3.241 3.188 -0.05
/ avg req/sec 771.45 784.2 +12.75
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.392 1.399 ⚠️ +0.01
/error-in-render avg req/sec 1796.03 1786.81 ⚠️ -9.22
Client Bundles (main, webpack)
vercel/next.js canary shinkj11/next-js-official bugfix/image-onerror-fix Change
925.HASH.js gzip 178 B 178 B
framework-HASH.js gzip 42.2 kB 42.2 kB
main-HASH.js gzip 29.1 kB 29.1 kB
webpack-HASH.js gzip 1.45 kB 1.45 kB
Overall change 72.9 kB 72.9 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary shinkj11/next-js-official bugfix/image-onerror-fix Change
polyfills-HASH.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages Overall decrease ✓
vercel/next.js canary shinkj11/next-js-official bugfix/image-onerror-fix Change
_app-HASH.js gzip 1.35 kB 1.35 kB
_error-HASH.js gzip 179 B 179 B
amp-HASH.js gzip 313 B 313 B
css-HASH.js gzip 325 B 325 B
dynamic-HASH.js gzip 3.02 kB 3.02 kB
head-HASH.js gzip 351 B 351 B
hooks-HASH.js gzip 921 B 921 B
image-HASH.js gzip 5.79 kB 5.78 kB -9 B
index-HASH.js gzip 261 B 261 B
link-HASH.js gzip 2.44 kB 2.44 kB
routerDirect..HASH.js gzip 322 B 322 B
script-HASH.js gzip 393 B 393 B
withRouter-HASH.js gzip 317 B 317 B
85e02e95b279..7e3.css gzip 107 B 107 B
Overall change 16.1 kB 16.1 kB -9 B
Client Build Manifests
vercel/next.js canary shinkj11/next-js-official bugfix/image-onerror-fix Change
_buildManifest.js gzip 457 B 457 B
Overall change 457 B 457 B
Rendered Page Sizes
vercel/next.js canary shinkj11/next-js-official bugfix/image-onerror-fix Change
index.html gzip 531 B 531 B
link.html gzip 544 B 544 B
withRouter.html gzip 526 B 526 B
Overall change 1.6 kB 1.6 kB

Diffs

Diff for _buildManifest.js
@@ -12,7 +12,7 @@ self.__BUILD_MANIFEST = {
   ],
   "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-96a5d6ed07cf5a83.js"],
   "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-9dfe734f583d4926.js"],
-  "/image": ["static\u002Fchunks\u002Fpages\u002Fimage-9a0a6e890d6a266a.js"],
+  "/image": ["static\u002Fchunks\u002Fpages\u002Fimage-4ebd299a1253d245.js"],
   "/link": ["static\u002Fchunks\u002Fpages\u002Flink-c605640c895e01ab.js"],
   "/routerDirect": [
     "static\u002Fchunks\u002Fpages\u002FrouterDirect-98eb70bf22fb21da.js"
Diff for image-HASH.js
@@ -149,7 +149,6 @@
           objectFit = _param.objectFit,
           objectPosition = _param.objectPosition,
           onLoadingComplete = _param.onLoadingComplete,
-          onError = _param.onError,
           _placeholder = _param.placeholder,
           placeholder = _placeholder === void 0 ? "empty" : _placeholder,
           blurDataURL = _param.blurDataURL,
@@ -169,7 +168,6 @@
             "objectFit",
             "objectPosition",
             "onLoadingComplete",
-            "onError",
             "placeholder",
             "blurDataURL"
           ]);
Commit: 9d90d9f

@styfle styfle changed the title Fix onError omission of Image Fix next/image usage of onError() Apr 22, 2022
Copy link
Member

@styfle styfle left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perfect, thanks! 🏅

@kodiakhq kodiakhq bot merged commit 42c01dd into vercel:canary Apr 22, 2022
@xiaoxiaosaohuo
Copy link

thanks, this is a very import PR, hoping to release it soon

@djejaquino
Copy link

Good find @shinkj11

If anyone needs a quick fix for this, you might look into using onErrorCapture event instead.

@styfle
Copy link
Member

styfle commented Apr 26, 2022

The fix has been released to the canary channel. You can try it out today with npm install next@canary, thanks!

@djejaquino
Copy link

@styfle how long usually these sit in canary before going live in prod? Thanks

@styfle
Copy link
Member

styfle commented Apr 27, 2022

It depends if we find bugs on canary, but usually a couple weeks between stable patch releases.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators May 28, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants