Commit Graph
2916 Commits
Author SHA1 Message Date
B.Orlov 7d57c1f0c1 Fix batchedUpdates return value (#7444) 2016-08-09 10:26:29 -07:00
Sebastian Markbage af7dd8e0a1 Move wip fibers to childInProgress
This took a while to figure out, but we need to be able to store
children that are currently being worked on separately from the
current children. We always need a canonical "current" children
so that we can update them. However, we also need a different set
that we're currently working on so that we have a way to get to
already progressed work.

This solve the starvation problem in the first render because now
we can reach children that were never rendered and have a place
to store their progressed work on. The unit test changes tests
this.

This lets us get rid of the hasWorkInProgress flag.

When we reconcile new children we need to reconcile them against
progressed work so that we can reuse it. The progressed work is
"work in progress" nodes. So in that case we need to mutate
instead of clone, to preserve the invariant that only two versions
exist at any given point. This effectively forks the
ReactChildFiber implementation.
2016-08-05 14:33:48 -07:00
Sebastian Markbage 94ed00740b Introduce shouldComponentUpdate in Fiber
It is important to be able to use this since it avoids starvation
problems if you can reuse partially completed work.
2016-08-05 14:31:47 -07:00
Sebastian Markbage de6069e550 Reuse the correct child and side-effects when reusing partial work
We need to use the *other* child because we reset it to the
current one on the way up.

We also need to reset the first/last side-effects to that of the
children so that we're committing the right thing.
2016-08-05 14:31:46 -07:00
Sebastian Markbage 9fca812139 Fix NoWork bug
Thanks @acdlite. Add comment about future unit test coverage.

This was actually hiding the fact that we are only able to reuse
existing work if it was marked as completely finished which it
won't be if we reuse its pending priority.

However, we should be able to bail out even if there is work
remaining in a subtree.
2016-08-05 14:31:46 -07:00
Sebastian Markbage 48b7b2c67c Add note about potential future bugs 2016-08-05 14:31:46 -07:00
Sebastian Markbage 5ac87e0d0f When a reconciliation gets down prioritized, reuse children
When we downprioritize children we need to remember to reuse the
old children in the update side-effect.

This whole set up is very unfortunate since we can have children
in our active tree that never actually finished rendering. This
strategy might be fundamentally flawed, not sure.
2016-08-05 14:31:46 -07:00
Sebastian Markbage d0838797a3 Set pendingProps in cloneFiber for symmetry
This might become confusing later but is unreachable today. That's
because existing pendingProps only matter when a clone is updated,
but this path can only matter when it is created.
2016-08-05 14:31:46 -07:00
Sebastian Markbage 5c094fb5d1 Don't reset next work pointer for lower priority work
If the current work is higher priority than the new work, then
don't bother resetting the unit of work pointer since it won't
affect the execution order.
2016-08-05 14:31:46 -07:00
Sebastian Markbage 7e9b958662 Reuse old props for the update if there are no new props 2016-08-05 14:31:46 -07:00
Sebastian Markbage de4a7b972b Move all imports to closures in Fiber
I'm paranoid about inline-ability so I use this pattern of adding
a constant to the closure everywhere.

ES6 modules help avoid that but we can't use that consistently
because of the dependency injection so instead I opt for making
this explicit everywhere.

Grep: \b[a-zA-Z_$\d]+\.[a-zA-Z_$\d]+\(
2016-08-05 14:31:46 -07:00
Sebastian Markbage e0e4954061 Remove console.logs from Fiber
The code is sufficiently complex now that this is more noise than
helpful. Will just temporary explicit logs in the future.
2016-08-05 14:31:46 -07:00
Sebastian Markbage 00084f5503 [Fiber] Rudimentary class support
Mostly just to get started with unit testing.
2016-08-05 14:31:46 -07:00
Sebastian Markbage 28dc560d0f [Fiber] unmountComponentAtNode
Add unmounting hook.
2016-08-05 14:31:45 -07:00
Keyan Zhang 8af6f9e5a2 Fix <input> with type date/time/etc. issue on mobile browsers (#7397)
Fix <input> with type date/time/etc. issue on mobile browsers
2016-08-02 12:56:05 -07:00
Timothy Yung 0fb8febd0a Change trackedTouchCount invariant into a console.error (#7400)
* Change `trackedTouchCount` invariant into a console.error

* Fix ResponderEventPlugin lint warning
2016-08-01 22:42:30 -07:00
Nathan Hunzaker 8aed0cd67e Add some semicolons for linting. (#7390) 2016-08-01 21:17:58 +01:00
Keyan Zhang 328fc75bc9 Merge pull request #7381 from keyanzhang/rename-hooks
Rename Devtool to Hook
2016-08-01 11:42:33 -07:00
Nathan Hunzaker 2823dfcbfb Avoid "Member not found exception" in IE10 (#7343)
'change' custom events raise "Member not found" in <= IE10. To
circumvent this, the SyntheticEvent class now checks for "typeof
event.cancelBubble !== 'unknown'". This eliminates this exception and
maintains the expected bubbling functionality.

Addresses #7320.
2016-07-31 13:59:51 -07:00
Keyan Zhang bba0d992d8 temporary compatibility fix 2016-07-29 16:49:44 -07:00
Keyan Zhang 81f554817c renamed methods (devtool -> hook) 2016-07-29 16:12:23 -07:00
Keyan Zhang f2fc182250 renamed modules (devtool -> hook) 2016-07-29 16:12:23 -07:00
Cheng Lou 0292d34047 PropTypes: distinguish nullable from optional object field (#7291)
* PropTypes: distinguish nullable from optional object field

This gives a more precise message (no type semantics change) to the case of passing a field in an object, but whose value is `null`:

Before:

```js
propTypes: {
  foo: React.PropTypes.number.isRequired
}
```

Would scream "Required prop `foo` was not specified in `MyComp`".

Now it'll be "Required prop `foo` was specified in `MyComp`, but its value is `null`.".

Works as expected in nested objects.

This fixes the issue of a component transitively passing a `null`, specifying the correct field to the child but have the child tell it that it didn't provide the prop.

Optional field and nullable are two different things anyway.

* Add missing test case.

* Reword messages.
2016-07-26 16:26:51 -07:00
Ben Alpert 30aa84181d Remove unused unmountIDFromEnvironment (#7259)
I got rid of the need for this a few months ago.
2016-07-25 23:34:22 -07:00
Patrick Finnigan 85dcbf83c5 fix doc for React Native mountComponent (#7313) 2016-07-25 16:19:15 -07:00
Keyan Zhang 484f96bb61 Merge pull request #7321 from keyanzhang/codemod-es6-component
Codemod tests from createClass to ES2015 classes
2016-07-23 15:22:35 -07:00
Keyan Zhang 4d8a5bcd5c codemodded tests from createClass to ES2015 classes
- reverted more files under classic
2016-07-23 15:16:12 -07:00
Nathan Hunzaker 08a0895887 Avoid validation warning when inputs change type (#7333)
For controlled inputs, `updateWrapper` was getting called before the
`type` prop had a chance to update. This could lead to a case where
switching from the `text` to `number` type caused a validation error
that would prevent the proper input value from being assigned.

This commit moves the call to `ReactDOMInput.updateWrapper` below
`_updateProperties` to avoid this situation.
2016-07-22 18:38:29 -07:00
Keyan Zhang 3fd582643e improved warning in ReactUpdateQueue (#7326) 2016-07-21 12:41:31 +01:00
Alex Zherdev 8bcea5310e Mention actual prop type in element type checker (#7319) 2016-07-20 19:16:55 +01:00
Sassan Haradji 1cc9a5dc71 prevent spamming warnings related to performance measurement code (#7299)
* prevent spamming warnings related to performance measurement code

* minor changes in names and such

* -

* -
2016-07-19 11:46:12 +01:00
Dan Abramov 15ae5857f6 Eagerly evaluate inline requires in Jest (#7245)
* Eagerly evaluate inline requires in Jest

I inlined some requires in #7188 to fix the build size regression.
However this caused an issue with Jest due to it resetting module registry between tests.

This is a temporary fix to #7240.
It should be reverted as part of #7178.

* Make the hack work in all environments
2016-07-16 20:51:25 +01:00
Dan Abramov 27d7592cf6 Fix TestUtils crash with NODE_ENV=production (#7246)
I caused it with #7189.
We generally don’t recommend running TestUtils in production environment but this is technically a regression.

Fixes #7231.
2016-07-14 12:02:39 +01:00
Troy DeMonbreun fc04310792 Fix #7099 (#7251)
* Set step prop before value prop

* Embed comments on .step sequence behavior
2016-07-13 13:28:14 -07:00
Mert Kahyaoğlu 2da50a0f18 Renaming: ReactDOM (#7265)
Rename React with ReactDOM
2016-07-13 12:59:02 -07:00
Brandon Dail cccef3c683 Add referrerPolicy to HTMLDOMPropertyConfig (#7274) 2016-07-13 11:56:57 -07:00
Keyan Zhang 5103e1d6a1 warn for using maps as children with owner info (#7260) 2016-07-13 08:29:42 -07:00
Ben Alpert caec8d5ce7 Test renderer improvements (#7258)
Adds `.update(newElement)` and `.unmount()` and makes children reorders and composite type swapping work.

Part of #7148.
2016-07-12 22:35:31 -07:00
Usman c52a2b9ab0 Fixed all eslint warnings (#7230) 2016-07-11 17:47:41 -07:00
Samy Al Zahrani 9a80d42817 Add xmlns and xmlns:xlink attributes (#6471) 2016-07-09 13:32:53 +01:00
Dan Abramov 64e7602b3b Fix unmounting performance regression in V8 (#7232)
As reported in #7227, unmounting performance regressed with React 15.
It seems that `delete` has become much slower since we started using numeric keys.
Forcing dictionary keys to start with a dot fixes the issue.
2016-07-09 01:32:20 +01:00
Brandon Dail b6e1eb2718 Inject default batching after pending transactions (#7033) 2016-07-08 18:52:14 +01:00
Dan Abramov 1a0e3a3215 Make ReactPerf.start() work during reconciliation (#7208)
* Add failing test demonstrating a ReactPerf warning

* Make the failing ReactPerf test more precise

* Make ReactPerf.start() work during reconciliation

* Reorder lifecycle methods for greater clarity

* Fix memory leak

* Error boundaries should not break ReactPerf

* Put onBeginFlush/onEndFlush into transaction wrappers

This looks cleaner even though it is not strictly necessary.
We still call them manually for unmounting because it doesn't have a transaction.
2016-07-07 19:41:30 +01:00
Ben Alpert c8fbdac227 Add React.PureComponent (#7195)
This provides an easy way to indicate that components should only rerender when given new props, like PureRenderMixin. If you rely on mutation in your React components, you can continue to use `React.Component`.

Inheriting from `React.PureComponent` indicates to React that your component doesn't need to rerender when the props are unchanged. We'll compare the old and new props before each render and short-circuit if they're unchanged. It's like an automatic shouldComponentUpdate.
2016-07-06 13:24:44 -07:00
Andrey Okonetchnikov 0d892c03da Do not render name attribute on INPUT if it is not supplied. Closes #7198. (#7199) 2016-07-06 10:11:46 -07:00
Paul O’Shannessy 5c737b9550 Don't detach value from defaultValue for submit/reset inputs (#7197) 2016-07-05 16:39:43 -07:00
Dan Abramov d2ff462b79 Pass shouldHaveDebugID flag to instantiateComponent (#7193)
* Add failing tests for #7187 and #7190

* Pass shouldHaveDebugID flag to instantiateComponent

This allows us to remove a hack that was added in #6770 and caused #7187 and #7190.

* Move logic for choosing whether to use debugID outside instantiate
2016-07-06 00:22:24 +01:00
Brandon Dail 2c93a41580 Use hardcoded value for PropType secret (#7194)
Rename secret!
2016-07-06 00:22:01 +01:00
Sebastian Markbåge 4f7a38c3b7 Move error boundaries test into reconciler (#7166)
The src/core folder moved while this PR was pending so this file
didn't move with it.

Let's get rid of this annoying top level folder.
2016-07-05 15:09:13 -07:00
Timothy Yung 2b226f5fa6 Revise ResponderTouchHistoryStore Error Handling (#7143)
Touch behavior is inconsistent across different platforms, and ResponderTouchHistoryStore currently fatals when assumptions are broken. In addition, the behavior differs between development and production.

This pull request does a few things to make ResponderTouchHistoryStore easier to deal with:

Adds Flow to keep the TouchEvent, Touch, and TouchRecord types straight.
Changes behavior to be consistent across environments. This means either always throwing or never throwing (and making use of warning and console.error as appropriate).
When an orphaned move or end event is received, print debug information and ignore it instead of crashing and burning.
2016-07-05 13:15:58 -07:00