Skip to content

Conversation

sebmarkbage
Copy link
Collaborator

@sebmarkbage sebmarkbage commented Jun 27, 2025

Stacked on #33658 and #33659.

If we detect that a component is receiving only deeply equal objects, then we highlight it as potentially problematic and worth looking into.

Screenshot 2025-06-27 at 4 15 28 PM

It's fairly conservative and can bail out for a number of reasons:

  • We only log it on the first parent that triggered this case since other children could be indirect causes.
  • If children has changed then we bail out since this component will rerender anyway. This means that it won't warn for a lot of cases that receive plain DOM children since the DOM children won't themselves get logged.
  • If the component's total render time including children is 100ms or less then we skip warning because rerendering might not be a big deal.
  • We don't warn if you have shallow equality but could memoize the JSX element itself since we don't typically recommend that and React Compiler doesn't do that. It only warns if you have nested objects too.
  • If the depth of the objects is deeper than like the 3 levels that we print diffs for then we wouldn't warn since we don't know if they were equal (although we might still warn on a child).
  • If the component had any updates scheduled on itself (e.g. setState) then we don't warn since it would rerender anyway. This should really consider Context updates too but we don't do that atm. Technically you should still memoize the incoming props even if you also had unrelated updates since it could apply to deeper bailouts.

@github-actions github-actions bot added the React Core Team Opened by a member of the React Core Team label Jun 27, 2025
@react-sizebot
Copy link

Comparing: d92056e...b2e0af3

Critical size changes

Includes critical production bundles, as well as any change greater than 2%:

Name +/- Base Current +/- gzip Base gzip Current gzip
oss-stable/react-dom/cjs/react-dom.production.js = 6.68 kB 6.68 kB = 1.83 kB 1.83 kB
oss-stable/react-dom/cjs/react-dom-client.production.js = 530.57 kB 530.57 kB = 93.67 kB 93.67 kB
oss-experimental/react-dom/cjs/react-dom.production.js = 6.69 kB 6.69 kB = 1.83 kB 1.83 kB
oss-experimental/react-dom/cjs/react-dom-client.production.js = 651.66 kB 651.66 kB = 114.78 kB 114.78 kB
facebook-www/ReactDOM-prod.classic.js = 674.81 kB 674.81 kB = 118.78 kB 118.78 kB
facebook-www/ReactDOM-prod.modern.js = 665.30 kB 665.30 kB = 117.20 kB 117.19 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js = 204.90 kB 200.34 kB = 37.27 kB 36.68 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js = 204.84 kB 200.29 kB = 37.25 kB 36.66 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js = 203.69 kB 199.14 kB = 36.97 kB 36.37 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js = 196.92 kB 192.30 kB = 35.86 kB 35.25 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js = 190.95 kB 186.44 kB = 35.20 kB 34.63 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js = 184.14 kB 179.59 kB = 33.44 kB 32.90 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js = 184.07 kB 179.52 kB = 33.43 kB 32.89 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js = 180.52 kB 175.97 kB = 33.04 kB 32.47 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js = 183.14 kB 178.52 kB = 33.03 kB 32.48 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js = 183.14 kB 178.52 kB = 33.03 kB 32.48 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js = 183.09 kB 178.47 kB = 33.01 kB 32.46 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js = 183.09 kB 178.47 kB = 33.01 kB 32.46 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js = 179.98 kB 175.43 kB = 32.91 kB 32.33 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js = 181.94 kB 177.32 kB = 32.73 kB 32.18 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js = 181.94 kB 177.32 kB = 32.73 kB 32.18 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js = 176.26 kB 171.64 kB = 32.08 kB 31.50 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js = 175.42 kB 170.80 kB = 31.92 kB 31.35 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js = 175.42 kB 170.80 kB = 31.92 kB 31.35 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js = 175.35 kB 170.74 kB = 31.90 kB 31.33 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js = 175.35 kB 170.74 kB = 31.90 kB 31.33 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js = 175.17 kB 170.48 kB = 31.68 kB 31.09 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js = 175.17 kB 170.48 kB = 31.68 kB 31.09 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js = 172.21 kB 167.59 kB = 31.58 kB 30.99 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js = 172.16 kB 167.54 kB = 31.48 kB 30.95 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js = 172.16 kB 167.54 kB = 31.48 kB 30.95 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js = 171.62 kB 167.00 kB = 31.36 kB 30.81 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js = 171.62 kB 167.00 kB = 31.36 kB 30.81 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js = 169.20 kB 164.62 kB = 31.02 kB 30.49 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js = 169.20 kB 164.62 kB = 31.02 kB 30.49 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js = 167.54 kB 162.86 kB = 30.57 kB 29.95 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js = 167.54 kB 162.86 kB = 30.57 kB 29.95 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js = 163.84 kB 159.16 kB = 30.02 kB 29.45 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js = 163.84 kB 159.16 kB = 30.02 kB 29.45 kB
oss-experimental/react-server/cjs/react-server-flight.development.js = 131.84 kB 127.30 kB = 23.98 kB 23.37 kB
oss-stable-semver/react-server/cjs/react-server-flight.development.js = 123.49 kB 118.89 kB = 22.43 kB 21.88 kB
oss-stable/react-server/cjs/react-server-flight.development.js = 123.49 kB 118.89 kB = 22.43 kB 21.88 kB

Significant size changes

Includes any change greater than 0.2%:

Expand to show
Name +/- Base Current +/- gzip Base gzip Current gzip
oss-experimental/react-art/cjs/react-art.development.js +0.94% 682.96 kB 689.37 kB +1.28% 107.77 kB 109.14 kB
facebook-www/ReactART-dev.modern.js +0.88% 727.75 kB 734.18 kB +1.25% 113.20 kB 114.61 kB
react-native/implementations/ReactFabric-dev.fb.js +0.88% 731.16 kB 737.59 kB +1.16% 116.27 kB 117.61 kB
facebook-www/ReactART-dev.classic.js +0.87% 737.24 kB 743.68 kB +1.26% 114.96 kB 116.41 kB
react-native/implementations/ReactNativeRenderer-dev.fb.js +0.87% 742.34 kB 748.78 kB +1.13% 117.89 kB 119.22 kB
oss-experimental/react-reconciler/cjs/react-reconciler.development.js +0.79% 810.61 kB 817.02 kB +1.09% 126.51 kB 127.88 kB
facebook-www/ReactReconciler-dev.modern.js +0.76% 844.53 kB 850.97 kB +1.00% 131.09 kB 132.40 kB
facebook-www/ReactReconciler-dev.classic.js +0.75% 853.73 kB 860.17 kB +0.99% 132.84 kB 134.16 kB
facebook-react-native/react-dom/cjs/ReactDOMClient-dev.js +0.57% 1,101.29 kB 1,107.53 kB +0.73% 182.44 kB 183.76 kB
facebook-react-native/react-dom/cjs/ReactDOMProfiling-dev.js +0.56% 1,117.56 kB 1,123.80 kB +0.72% 185.22 kB 186.56 kB
facebook-www/ReactDOM-dev.modern.js +0.53% 1,224.00 kB 1,230.44 kB +0.67% 202.28 kB 203.63 kB
oss-experimental/react-dom/cjs/react-dom-client.development.js +0.53% 1,182.01 kB 1,188.22 kB +0.69% 197.00 kB 198.37 kB
facebook-www/ReactDOM-dev.classic.js +0.52% 1,233.15 kB 1,239.58 kB +0.65% 204.01 kB 205.33 kB
facebook-www/ReactDOMTesting-dev.modern.js +0.52% 1,240.54 kB 1,246.98 kB +0.64% 205.99 kB 207.30 kB
oss-experimental/react-dom/cjs/react-dom-profiling.development.js +0.52% 1,198.39 kB 1,204.60 kB +0.69% 199.84 kB 201.23 kB
oss-experimental/react-dom/cjs/react-dom-unstable_testing.development.js +0.52% 1,198.55 kB 1,204.76 kB +0.68% 200.70 kB 202.06 kB
facebook-www/ReactDOMTesting-dev.classic.js +0.52% 1,249.68 kB 1,256.12 kB +0.63% 207.66 kB 208.97 kB
oss-stable/react-server-dom-esm/esm/react-server-dom-esm-client.browser.development.js = 140.74 kB 140.35 kB = 32.95 kB 32.86 kB
oss-stable-semver/react-server-dom-esm/esm/react-server-dom-esm-client.browser.development.js = 140.72 kB 140.32 kB = 32.92 kB 32.84 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js = 114.70 kB 114.26 kB = 21.23 kB 21.08 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js = 114.70 kB 114.26 kB = 21.23 kB 21.08 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.development.js = 113.37 kB 112.93 kB = 20.98 kB 20.83 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.development.js = 113.37 kB 112.93 kB = 20.98 kB 20.83 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.development.js = 111.01 kB 110.57 kB = 20.75 kB 20.60 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.development.js = 111.01 kB 110.57 kB = 20.75 kB 20.60 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js = 110.02 kB 109.58 kB = 20.64 kB 20.48 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js = 110.02 kB 109.58 kB = 20.64 kB 20.48 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.development.js = 109.93 kB 109.49 kB = 20.60 kB 20.44 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.development.js = 109.93 kB 109.49 kB = 20.60 kB 20.44 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-client.node.development.js = 108.09 kB 107.65 kB = 20.25 kB 20.11 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-client.node.development.js = 108.09 kB 107.65 kB = 20.25 kB 20.11 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-client.edge.development.js = 106.83 kB 106.39 kB = 20.12 kB 19.97 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-client.edge.development.js = 106.83 kB 106.39 kB = 20.12 kB 19.97 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-client.node.development.js = 105.54 kB 105.10 kB = 19.80 kB 19.65 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-client.node.development.js = 105.54 kB 105.10 kB = 19.80 kB 19.65 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js = 104.29 kB 103.84 kB = 19.63 kB 19.51 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js = 104.24 kB 103.79 kB = 19.61 kB 19.48 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js = 103.73 kB 103.29 kB = 19.49 kB 19.37 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js = 103.68 kB 103.24 kB = 19.47 kB 19.34 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-client.browser.development.js = 102.65 kB 102.21 kB = 19.12 kB 19.01 kB
oss-stable/react-client/cjs/react-client-flight.development.js = 102.61 kB 102.17 kB = 18.75 kB 18.64 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-client.browser.development.js = 102.60 kB 102.16 kB = 19.10 kB 18.99 kB
oss-stable-semver/react-client/cjs/react-client-flight.development.js = 102.59 kB 102.15 kB = 18.73 kB 18.62 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.development.js = 101.54 kB 101.10 kB = 19.10 kB 18.98 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.development.js = 101.49 kB 101.05 kB = 19.08 kB 18.95 kB
oss-experimental/react-markup/cjs/react-markup.react-server.development.js = 624.67 kB 619.17 kB = 110.46 kB 109.68 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js = 204.90 kB 200.34 kB = 37.27 kB 36.68 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js = 204.84 kB 200.29 kB = 37.25 kB 36.66 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js = 203.69 kB 199.14 kB = 36.97 kB 36.37 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js = 196.92 kB 192.30 kB = 35.86 kB 35.25 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js = 190.95 kB 186.44 kB = 35.20 kB 34.63 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js = 184.14 kB 179.59 kB = 33.44 kB 32.90 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js = 184.07 kB 179.52 kB = 33.43 kB 32.89 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js = 180.52 kB 175.97 kB = 33.04 kB 32.47 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js = 183.14 kB 178.52 kB = 33.03 kB 32.48 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js = 183.14 kB 178.52 kB = 33.03 kB 32.48 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js = 183.09 kB 178.47 kB = 33.01 kB 32.46 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js = 183.09 kB 178.47 kB = 33.01 kB 32.46 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js = 179.98 kB 175.43 kB = 32.91 kB 32.33 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js = 181.94 kB 177.32 kB = 32.73 kB 32.18 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js = 181.94 kB 177.32 kB = 32.73 kB 32.18 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js = 176.26 kB 171.64 kB = 32.08 kB 31.50 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js = 175.42 kB 170.80 kB = 31.92 kB 31.35 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js = 175.42 kB 170.80 kB = 31.92 kB 31.35 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js = 175.35 kB 170.74 kB = 31.90 kB 31.33 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js = 175.35 kB 170.74 kB = 31.90 kB 31.33 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js = 175.17 kB 170.48 kB = 31.68 kB 31.09 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js = 175.17 kB 170.48 kB = 31.68 kB 31.09 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js = 172.21 kB 167.59 kB = 31.58 kB 30.99 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js = 172.16 kB 167.54 kB = 31.48 kB 30.95 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js = 172.16 kB 167.54 kB = 31.48 kB 30.95 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js = 171.62 kB 167.00 kB = 31.36 kB 30.81 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js = 171.62 kB 167.00 kB = 31.36 kB 30.81 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js = 169.20 kB 164.62 kB = 31.02 kB 30.49 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js = 169.20 kB 164.62 kB = 31.02 kB 30.49 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js = 167.54 kB 162.86 kB = 30.57 kB 29.95 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js = 167.54 kB 162.86 kB = 30.57 kB 29.95 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js = 163.84 kB 159.16 kB = 30.02 kB 29.45 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js = 163.84 kB 159.16 kB = 30.02 kB 29.45 kB
oss-experimental/react-server/cjs/react-server-flight.development.js = 131.84 kB 127.30 kB = 23.98 kB 23.37 kB
oss-stable-semver/react-server/cjs/react-server-flight.development.js = 123.49 kB 118.89 kB = 22.43 kB 21.88 kB
oss-stable/react-server/cjs/react-server-flight.development.js = 123.49 kB 118.89 kB = 22.43 kB 21.88 kB

Generated by 🚫 dangerJS against b2e0af3

@sebmarkbage sebmarkbage merged commit 0b78161 into facebook:main Jul 2, 2025
240 of 241 checks passed
github-actions bot pushed a commit that referenced this pull request Jul 2, 2025
…nce Track (#33660)

Stacked on #33658 and #33659.

If we detect that a component is receiving only deeply equal objects,
then we highlight it as potentially problematic and worth looking into.

<img width="1055" alt="Screenshot 2025-06-27 at 4 15 28 PM"
src="https://github.com/user-attachments/assets/e96c6a05-7fff-4fd7-b59a-36ed79f8e609"
/>

It's fairly conservative and can bail out for a number of reasons:

- We only log it on the first parent that triggered this case since
other children could be indirect causes.
- If children has changed then we bail out since this component will
rerender anyway. This means that it won't warn for a lot of cases that
receive plain DOM children since the DOM children won't themselves get
logged.
- If the component's total render time including children is 100ms or
less then we skip warning because rerendering might not be a big deal.
- We don't warn if you have shallow equality but could memoize the JSX
element itself since we don't typically recommend that and React
Compiler doesn't do that. It only warns if you have nested objects too.
- If the depth of the objects is deeper than like the 3 levels that we
print diffs for then we wouldn't warn since we don't know if they were
equal (although we might still warn on a child).
- If the component had any updates scheduled on itself (e.g. setState)
then we don't warn since it would rerender anyway. This should really
consider Context updates too but we don't do that atm. Technically you
should still memoize the incoming props even if you also had unrelated
updates since it could apply to deeper bailouts.

DiffTrain build for [0b78161](0b78161)
github-actions bot pushed a commit that referenced this pull request Jul 2, 2025
…nce Track (#33660)

Stacked on #33658 and #33659.

If we detect that a component is receiving only deeply equal objects,
then we highlight it as potentially problematic and worth looking into.

<img width="1055" alt="Screenshot 2025-06-27 at 4 15 28 PM"
src="https://github.com/user-attachments/assets/e96c6a05-7fff-4fd7-b59a-36ed79f8e609"
/>

It's fairly conservative and can bail out for a number of reasons:

- We only log it on the first parent that triggered this case since
other children could be indirect causes.
- If children has changed then we bail out since this component will
rerender anyway. This means that it won't warn for a lot of cases that
receive plain DOM children since the DOM children won't themselves get
logged.
- If the component's total render time including children is 100ms or
less then we skip warning because rerendering might not be a big deal.
- We don't warn if you have shallow equality but could memoize the JSX
element itself since we don't typically recommend that and React
Compiler doesn't do that. It only warns if you have nested objects too.
- If the depth of the objects is deeper than like the 3 levels that we
print diffs for then we wouldn't warn since we don't know if they were
equal (although we might still warn on a child).
- If the component had any updates scheduled on itself (e.g. setState)
then we don't warn since it would rerender anyway. This should really
consider Context updates too but we don't do that atm. Technically you
should still memoize the incoming props even if you also had unrelated
updates since it could apply to deeper bailouts.

DiffTrain build for [0b78161](0b78161)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed React Core Team Opened by a member of the React Core Team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants