Commit Graph
275 Commits
Author SHA1 Message Date
Tom GassonandBrandon Dail b87e20c999 Fix fiber/record-tests to work on windows (slash differences) (#8796) 2017-01-14 21:16:03 -06:00
Dan AbramovandGitHub eb0f91a074 [Fiber] Fix rendering SVG into non-React SVG tree (#8638)
* Add a test for rendering SVG into a non-React SVG tree

It is failing in Fiber.

* Add a test for rendering HTML into non-React foreignObject

It happens to pass in Fiber.

* Determine root namespace by container namespace, not just tag

A tag alone is not enough to determine the tree namespace.

* Skip the test that exhibits jsdom bug in non-createElement mode

jsdom doesn't give HTML namespace to foreignObject.innerHTML children.
This problem doesn't exist in the browsers.

https://github.com/facebook/react/pull/8638#issuecomment-269349642

We will skip this test in non-createElement mode considering
that non-createElement mounting is effectively dead code now anyway.
2017-01-14 05:11:51 -08:00
Brian VaughnandGitHub b3f46bc926 Log all Fiber errors w/ component stack (#8756)
A new module has been added (ReactFiberErrorLogger). This logs error information (call stack and component stack) to the console to make errors easier to debug. It also prompts users to use error boundaries if they are not already using them.

In the future, perhaps this will be injectable, enabling users to provide their own handler for custom processing/logging. For the time being, this should help with issues like this / #2461.
2017-01-13 14:45:56 -08:00
Brian Vaughn 1d784ad796 Added memoization test for interrupted low-priority renders
Test added to verify that a high-priority update can reuse the children from an aborted low-priority update if shouldComponentUpdate returns false.
2017-01-13 13:46:20 -08:00
Brian Vaughn 33b0746d60 Removed redundant gCC test 2017-01-12 16:58:36 -08:00
Brian Vaughn eca1995137 Dedupe missing getChildContext warning by component name 2017-01-12 16:58:36 -08:00
Brian Vaughn 65b45f456e Stack and Fiber warn about missing getChildContext method
Previous (probably unintentional) behavior of Stack was to allow components to define childContextTypes without also supplying a getChildContext property. This PR updates Fiber to (temporarily) mimic that behavior. It also adds warning messages to both Fiber and Stack (along with a test).

For the time being, Fiber components with a missing getChildContext method will return the parent context as-is, after warning.
2017-01-12 16:58:36 -08:00
Andrew ClarkandGitHub fc68e8ad05 Merge pull request #8655 from acdlite/fibermemoizepremptedwork
[Fiber] Move memoization to begin phase
2017-01-12 16:08:02 -08:00
Andrew ClarkandGitHub cfa3c6555d Merge pull request #8757 from acdlite/fiberfeatureflag
Add feature flag to disable Fiber-only features
2017-01-12 13:52:32 -08:00
Andrew Clark e4f6538c48 Run test script and fix regressions
Fixes the case where there's an uncaught error and the root unmounts.
We implement this by rendering the root as if its child is null. Null is
not usually allowed at the top level, so we need to special case it.
2017-01-12 13:51:22 -08:00
Ben AlpertandAndrew Clark c44dac00ad Add test for state merging when sCU is false 2017-01-12 12:04:33 -08:00
Andrew Clark c6b25d8470 Confirm that a shallow bailout does not drop work in the child
Includes a test that confirms that work that is bailed out before
completing can be reused without dropping the entire subtree.
2017-01-12 11:55:52 -08:00
Andrew Clark 776beb9d0e Move memoization to begin phase
Currently we update the memoized inputs (props, state) during the
complete phase, as we go back up the tree. That means we can't reuse
work until of its children have completed.

By moving memoization to the begin phase, we can do a shallow bailout,
reusing a unit of work even if there's still work to do in its children.

Memoization now happens whenever a fiber's `child` property is updated;
typically, right after reconciling. It's also updated when
`shouldComponentUpdate` returns false, because that indicates that the
given state and props are equal to the memoized state and props.
2017-01-12 11:55:52 -08:00
Paul O’ShannessyandDan Abramov 9c18e23dcd Add error codes update to release process (#8749)
* Add error codes update to release process

* Update
2017-01-12 07:13:04 -08:00
俞火江andDan Abramov 22b2068554 fix failed tests on Windows #8737 (#8747)
* fix failed tests on Windows #8737

* Use regexp literal instead of `RegExp` constructor so that we don't need to bother with escaping special character like `\` and `.`.
Note that by removing the path separator in regexp, I've relaxed the matching condition a little.Since there's little chance we have files like `XXXReact.d.ts`,it should not matter.
2017-01-12 06:46:23 -08:00
Toru KobayashiandDan Abramov d2b66b7544 [Fiber] Fix to render falsy value as dangerouslySetInnerHTML (#8652)
* [Fiber] Fix to render falsy value as dangerouslySetInnerHTML

* Add more cases and rename test for clarity
2017-01-11 13:19:50 -08:00
Dustan KastenandDan Abramov fce37bd82c [Fiber] Implement test renderer (#8628)
* ReactTestRenderer move current impl to stack dir

* ReactTestRenderer on fiber: commence!

* ReactTestRenderer: most non-ref/non-public-instance tests are passing

* Move ReactTestFiberComponent functions from Renderer to Component file

* test renderer: get rid of private root containers and root Maps

* TestRenderer: switch impl based on ReactDOMFeatureFlag.useFiber

* ReactTestRenderer: inline component creation

* ReactTestRenderer: return to pristine original glory (+ Fiber for error order difference)

* TestRendererFiber: use a simple class as TestComponentInstances

* Add `getPublicInstance` to support TestRenderer `createNodeMock`

* Rename files to end. Update for `mountContainer->createContainer` change

* test renderer return same object to prevent unnecessary context pushing/popping

* Fiber HostConfig add getPublicInstance. This should be the identity fn everywhere except the test renderer

* appease flow

* Initial cleanup from sleepy work

* unstable_batchedUpdates

* Stack test renderer: cache nodeMock to not call on unmount

* add public instance type parameter to the reconciler

* test renderer: set _nodeMock when mounted

* More cleanup

* Add test cases for root fragments and (maybe?) root text nodes

* Fix the npm package build

Explicitly require the Stack version by default.
Add a separate entry point for Fiber.

We don't add fiber.js to the package yet since it's considered internal until React 16.

* Relax the ref type from Object to mixed

This seems like the most straightforward way to support getPublicInstance for test renderer.

* Remove accidental newline

* test renderer: unify TestComponent and TestContainer, handle root updates

* Remove string/number serialization attempts since Fiber ensures all textInstances are strings

* Return full fragments in toJSON

* Test Renderer remove TestComponent instances for simple objects

* Update babylon for exact object type syntax

* Use $$typeof because clarity > punching ducks.

* Minor Flow annotation tweaks

* Tweak style, types, and naming

* Fix typo
2017-01-11 11:19:32 -08:00
Dan AbramovandGitHub 9401fcbe43 Dedupe warnings about refs on functional components (#8739)
* Verify that functional component ref warning is deduplicated

It's not a big problem for string refs because the ref stays the same and the warning code path runs once per mount.

However, it is super annoying for functional refs since they're often written as arrows, and thus the warning fires for every render.

Both tests are currently failing since we're mounting twice, so even the string ref case prints warnings twice.

* Extract the warning condition to the top level

We don't want to run getStackAddendumByID() unless we actually know we're going to print the warning.

This doesn't affect correctness. Just a performance fix.

* Deduplicate warnings about refs on functional components

This fixes the duplicate warnings and adds an additional test for corner cases.

Our goal is to print one warning per one offending call site, when possible.

We try to use the element source for deduplication first because it gives us the exact JSX call site location.

If the element source is not available, we try to use the owner name for deduplication.

If even owner name is unavailable, we try to use the functional component unique identifier for deduplication so that at least the warning is seen once per mounted component.
2017-01-10 09:54:48 -08:00
Brian VaughnandBrian Vaughn f21caa332f Replaced chalk.color.red with chalk.red 2017-01-10 08:45:56 -08:00
Dustan KastenandDan Abramov 4571950acd Warn for callback refs on functional components (Stack + Fiber) (#8635)
* Fiber: warn for refs on SFCs

* Stateless refs: update warning to use component stack

* Warn for function refs (stack and fiber)

* Add owner reference to ref warnings

* Centralize stack ref warnings in ReactRef.attachRef

* Fiber stateless comp ref warning should only do work when necessary

* ReactDebugCurrentFiber maybe FunctionalComponents should act this way instead

* (chore) scripts/fiber/record-tests

* Add component._compositeType to ReactInstance Flow definition

* Don't handle 'stack inside fiber' case in the warning

We don't have a test for it. It's easy to mess it up and print the wrong thing so instead of verifying it I'll just remove this bit.

* Revert the change to getCurrentFiberOwnerName

This happened to work, but it is just a coincidence. This change didn’t really match what the function was supposed to be doing.

I’m not sure what the correct fix would be yet so this commit breaks tests.

* Add component indirection to the tests using owner name

This passes in Stack. It helps ensure we supply the correct owner name.

* Invalid type invariant should read owner from element

This brings the Fiber behavior in line with how Stack does it. The Fiber test was passing accidentally but broke down in more complicated cases (such as when we have an <Indirection> between the owner and the failing element).

Now we can also remove the weird cases from getCurrentFiberOwnerName() that didn't really make sense but helped get the (incomplete) tests pass in the past.

* Fiber should throw on a string ref inside functional component
2017-01-09 15:09:18 -08:00
Brian VaughnandGitHub f8a657ff93 Merge pull request #8706 from bvaughn/dont-recreate-masked-context-unless-needed
Dont recreate maked context unless unmasked context changes
2017-01-09 08:45:01 -08:00
Dan AbramovandGitHub 3d063d3f78 Write a release guide (#8705)
* Write a release guide

* Style nit
2017-01-09 06:39:27 -08:00
Brian Vaughn 27a6b96bdd Dont recreate maked context unless unmasked context changes
Doing so can lead to infinite loops if componentWillReceiveProps() calls setState()
2017-01-07 08:53:24 -08:00
Dan AbramovandGitHub ff36216767 No longer a WIP, eh? 2017-01-06 14:17:13 +00:00
Dan Abramov edf1605b54 Revert "Add es6-promisify"
This reverts commit c8cd133116475677f35cb166b476c4921f59bfbb.

It's not used in the code.
2017-01-06 06:00:09 -08:00
Dan Abramov fa6317b473 Remove unused import 2017-01-06 06:00:09 -08:00
Ben AlpertandDan Abramov f0bf0bcf9b Tweaks to npm-publish task 2017-01-06 06:00:09 -08:00
Paul O’ShannessyandDan Abramov 1bb6c7d77d [rrm] Fix stable-prs command so it updates milestone correctly 2017-01-06 06:00:09 -08:00
Paul O’ShannessyandDan Abramov 217d320223 [rrm] Update version script to account for dep change 2017-01-06 06:00:09 -08:00
Christopher ChedeauandDan Abramov 0273a84a03 Abort if not on -stable branch 2017-01-06 06:00:09 -08:00
Christopher ChedeauandDan Abramov 5d2bb14654 Display the help at startup, otherwise it's hard to figure out what to do 2017-01-06 06:00:09 -08:00
Christopher ChedeauandDan Abramov 1919e78445 Create data/ folder instead of crashing 2017-01-06 06:00:09 -08:00
Christopher ChedeauandDan Abramov f312d22bcb Add es6-promisify 2017-01-06 06:00:09 -08:00
Paul O’ShannessyandDan Abramov 302daad21f [rrm] Rewrite stable-prs command
Now with
- better UX (can skip, handle each failed cherr-pick individually)
- easier to read code
- better error handling / cancellation
2017-01-06 06:00:09 -08:00
Paul O’ShannessyandDan Abramov bd699783ac [rrm] Use git helper for all git commands 2017-01-06 06:00:09 -08:00
Paul O’ShannessyandDan Abramov 6950029891 [rrm] Create start-release command, create git utils
This does the essentials for starting a new release on the stable branch
2017-01-06 06:00:09 -08:00
Paul O’ShannessyandDan Abramov 6a25c883d4 [rrm] Update init command to use Promise style 2017-01-06 06:00:09 -08:00
Paul O’ShannessyandDan Abramov b73490e8df [rrm] Improve init & config loading experience 2017-01-06 06:00:09 -08:00
Paul O’ShannessyandDan Abramov aefaf6812d [rrm] Update to account for new react-test-renderer package 2017-01-06 06:00:09 -08:00
Paul O’ShannessyandDan Abramov 9dca908d63 [rrm] Add commands for npm access checking/granting 2017-01-06 06:00:09 -08:00
Paul O’ShannessyandDan Abramov 6657977761 [rrm] Lint 2017-01-06 06:00:09 -08:00
Paul O’ShannessyandDan Abramov fdcd19a1a6 [rrm] npm-publish command
This will publish all packages in build/packages/*.tgz to the "next" tag. If the current version is "stable" (doesn't trigger semver.prerelease()) then it will also update the "latest" dist-tag to point at that version.
2017-01-06 06:00:09 -08:00
Paul O’ShannessyandDan Abramov 82337b4a97 [rrm] Add logging to execInRepo, dry-run option 2017-01-06 06:00:09 -08:00
Paul O’ShannessyandDan Abramov 6eba27c4e4 [rrm] stable-prs: update milestone on PRs 2017-01-06 06:00:09 -08:00
Paul O’ShannessyandDan Abramov e02f20b5f4 [rrm] Move version reading up to app level 2017-01-06 06:00:09 -08:00
Paul O’ShannessyandDan Abramov c99cbb21e5 Initial import of react-release-manager 2017-01-06 06:00:09 -08:00
Brandon DailandAndrew Clark 394b06d6a6 [Fiber] Throw when attempting to unmount at an invalid node (#8688)
* Throw when attempting to unmount at an invalid node

* Remove extra character after invariant
2017-01-05 16:55:17 -08:00
Dan AbramovandGitHub 38d5eecdb3 Fix AMD and Brunch issues (#8686)
* Add manual build fixtures

* Inject ReactDOM into ReactWithAddons from ReactWithAddons

We used to read ReactDOM as a global inside ReactAddonsDOMDependenciesUMDShim.
This didn't work in AMD environments such as RequireJS and SystemJS.

Instead, I changed it so that ReactDOM gets injected into ReactWithAddons by ReactDOM itself.
This way we don't have to try to require it (which wouldn't work because AMD doesn't handle circular dependencies well).

This means you have to load ReactDOM first before using ReactDOM-dependent addons, but this was already the case before.

This commit makes all build fixtures pass.

* Memoize ReactDOM to avoid going into require on every access

* Add Brunch fixture

* Inline requires to work around Brunch bug

See #8556 and https://github.com/brunch/brunch/issues/1591#issuecomment-270742503 for context.
This appears to be a Brunch bug but we can keep a temporary fix until the next major.
2017-01-05 13:16:08 -08:00
Andrew Clark 56d69b95ba Update refs even if shouldComponentUpdate returns false
Implemented using a Ref effect type.
2017-01-04 12:05:25 -08:00
Brian VaughnandGitHub 25dacf54f2 Merge pull request #8677 from bvaughn/add-callback-validation-to-dom-render
Add callback validation to fiber-based renderers
2017-01-03 14:57:42 -08:00