react icon indicating copy to clipboard operation
react copied to clipboard

Tests for useInsertionEffect's behavior in strict mode.

Open egonSchiele opened this issue 2 years ago • 6 comments

Tested/linted/prettier'd. The site gave me an error message when I tried to sign the CLA, but I may have already signed it.

Summary

In strict mode, useInsertionEffect does not go through the mount-unmount-mount cycle the way useEffect and useLayoutEffect do, but I did not see any tests that cover this behavior, so this PR adds tests.

How did you test this change?

Test Suites: 2 skipped, 292 passed, 292 of 294 total
Tests:       90 skipped, 7745 passed, 7835 total
Snapshots:   141 passed, 141 total
Time:        135.524 s
Ran all test suites.
✨  Done in 136.89s.

react (main) $ yarn prettier
yarn run v1.22.19
$ node ./scripts/prettier/index.js write-changed
> git merge-base HEAD main
> git diff --name-only --diff-filter=ACMRTUB 722f02fa6b2354349936286fc14970d1015296e4
> git ls-files --others --exclude-standard
✨  Done in 1.25s.

react (main) $ yarn lint
yarn run v1.22.19
$ node ./scripts/tasks/eslint.js
Linting all files...
Hint: run `yarn linc` to only lint changed files.

Lint passed.
✨  Done in 6.33s.

react (main) $ yarn flow-ci
yarn run v1.22.19
$ node ./scripts/tasks/flow-ci.js
Running Flow on the dom-node renderer...
Found 0 errors
Flow passed for the dom-node renderer

Running Flow on the dom-bun renderer...
...
✨  Done in 189.15s.

egonSchiele avatar Mar 07 '23 00:03 egonSchiele

Comparing: 3cad3a54eda7b2d1c670c2d414f33d78a4c3f6af...80535b015de86d5b964bd02e754b62a50f6dc070

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.min.js = 155.28 kB 155.28 kB = 48.98 kB 48.98 kB
oss-experimental/react-dom/cjs/react-dom.production.min.js = 157.28 kB 157.28 kB = 49.65 kB 49.65 kB
facebook-www/ReactDOM-prod.classic.js = 532.64 kB 532.64 kB = 94.85 kB 94.85 kB
facebook-www/ReactDOM-prod.modern.js = 516.56 kB 516.56 kB = 92.45 kB 92.45 kB

Significant size changes

Includes any change greater than 0.2%:

Expand to show
Name +/- Base Current +/- gzip Base gzip Current gzip
oss-stable-semver/react-test-renderer/umd/react-test-renderer.development.js +0.28% 786.78 kB 788.95 kB +0.06% 164.76 kB 164.85 kB
oss-stable/react-test-renderer/umd/react-test-renderer.development.js +0.28% 786.81 kB 788.98 kB +0.06% 164.78 kB 164.88 kB
oss-experimental/react-test-renderer/umd/react-test-renderer.development.js +0.28% 787.20 kB 789.37 kB +0.06% 164.86 kB 164.97 kB
oss-stable-semver/react-test-renderer/cjs/react-test-renderer.development.js +0.27% 751.05 kB 753.08 kB +0.07% 162.93 kB 163.04 kB
oss-stable/react-test-renderer/cjs/react-test-renderer.development.js +0.27% 751.07 kB 753.11 kB +0.07% 162.96 kB 163.07 kB
oss-experimental/react-test-renderer/cjs/react-test-renderer.development.js +0.27% 751.44 kB 753.48 kB +0.07% 163.06 kB 163.17 kB
facebook-react-native/react-test-renderer/cjs/ReactTestRenderer-dev.js +0.26% 765.46 kB 767.49 kB +0.10% 164.73 kB 164.88 kB
oss-stable-semver/react-art/cjs/react-art.development.js +0.26% 771.63 kB 773.67 kB +0.06% 167.11 kB 167.21 kB
oss-stable/react-art/cjs/react-art.development.js +0.26% 771.66 kB 773.69 kB +0.06% 167.13 kB 167.23 kB
oss-experimental/react-art/cjs/react-art.development.js +0.26% 779.89 kB 781.93 kB +0.06% 168.61 kB 168.71 kB
facebook-www/ReactTestRenderer-dev.modern.js +0.26% 781.72 kB 783.74 kB +0.09% 167.93 kB 168.08 kB
facebook-www/ReactTestRenderer-dev.classic.js +0.26% 781.72 kB 783.74 kB +0.09% 167.93 kB 168.08 kB
oss-stable-semver/react-art/umd/react-art.development.js +0.25% 885.10 kB 887.27 kB +0.06% 186.14 kB 186.25 kB
oss-stable/react-art/umd/react-art.development.js +0.25% 885.13 kB 887.30 kB +0.06% 186.16 kB 186.27 kB
react-native/implementations/ReactFabric-dev.js +0.24% 832.47 kB 834.49 kB +0.07% 180.31 kB 180.44 kB
oss-experimental/react-art/umd/react-art.development.js +0.24% 893.83 kB 896.00 kB +0.06% 187.63 kB 187.74 kB
react-native/implementations/ReactNativeRenderer-dev.js +0.24% 845.23 kB 847.26 kB +0.07% 183.35 kB 183.48 kB
oss-stable-semver/react-reconciler/cjs/react-reconciler.development.js +0.24% 859.15 kB 861.18 kB +0.07% 183.07 kB 183.19 kB
oss-stable/react-reconciler/cjs/react-reconciler.development.js +0.24% 859.17 kB 861.21 kB +0.07% 183.09 kB 183.22 kB
oss-experimental/react-reconciler/cjs/react-reconciler.development.js +0.23% 867.41 kB 869.45 kB +0.07% 184.58 kB 184.71 kB
react-native/implementations/ReactFabric-dev.fb.js +0.23% 869.31 kB 871.34 kB +0.08% 187.47 kB 187.62 kB
facebook-www/ReactART-dev.modern.js +0.23% 870.95 kB 872.97 kB +0.09% 184.46 kB 184.63 kB
react-native/implementations/ReactNativeRenderer-dev.fb.js +0.23% 882.06 kB 884.08 kB +0.08% 190.55 kB 190.69 kB
facebook-www/ReactART-dev.classic.js +0.23% 882.15 kB 884.17 kB +0.09% 186.74 kB 186.91 kB

Generated by :no_entry_sign: dangerJS against 80535b015de86d5b964bd02e754b62a50f6dc070

react-sizebot avatar Mar 07 '23 00:03 react-sizebot

Related to https://github.com/facebook/react/issues/26320

egonSchiele avatar Mar 07 '23 00:03 egonSchiele

Tested with dev.html. With these changes, I get this output in strict mode:

[Log] @ Insertion Effect (dev.html, line 15)
[Log] @ Layout Effect (dev.html, line 7)
[Log] @ Insertion Effect (cleanup) (react-dom.development.js, line 26246)
[Log] @ Layout Effect (cleanup) (react-dom.development.js, line 26246)
[Log] @ Insertion Effect (dev.html, line 15)
[Log] @ Layout Effect (dev.html, line 7)

Without strict mode, I get:

[Log] @ Insertion Effect (dev.html, line 15)
[Log] @ Layout Effect (dev.html, line 7)

egonSchiele avatar Mar 09 '23 19:03 egonSchiele

Also, to make sure I'm not burying the lede: strict mode tests are currently not enabled in main. If I enable them, they fail. For example:

    if (supportsDoubleInvokeEffects()) {
      assertLog([
        'useInsertionEffect mount',
        'useLayoutEffect mount',
        'useEffect mount',
        'useInsertionEffect unmount',
        'useLayoutEffect unmount',
        'useEffect unmount',
        'useInsertionEffect mount',
        'useLayoutEffect mount',
        'useEffect mount',
      ]);
    } else {
      assertLog([
        'useInsertionEffect mount',
        'useLayoutEffect mount',
        'useEffect mount',
      ]);
    }

supportsDoubleInvokeEffects is never true. I set it to true and verified that this patch doesn't introduce new failures.

egonSchiele avatar Mar 09 '23 19:03 egonSchiele

This pull request has been automatically marked as stale. If this pull request is still relevant, please leave any comment (for example, "bump"), and we'll keep it open. We are sorry that we haven't been able to prioritize reviewing it yet. Your contribution is very much appreciated.

github-actions[bot] avatar Apr 09 '24 18:04 github-actions[bot]

Closing this pull request after a prolonged period of inactivity. If this issue is still present in the latest release, please ask for this pull request to be reopened. Thank you!

github-actions[bot] avatar Apr 17 '24 06:04 github-actions[bot]

This pull request has been automatically marked as stale. If this pull request is still relevant, please leave any comment (for example, "bump"), and we'll keep it open. We are sorry that we haven't been able to prioritize reviewing it yet. Your contribution is very much appreciated.

github-actions[bot] avatar Jul 24 '24 03:07 github-actions[bot]

Closing this pull request after a prolonged period of inactivity. If this issue is still present in the latest release, please ask for this pull request to be reopened. Thank you!

github-actions[bot] avatar Jul 31 '24 03:07 github-actions[bot]