Commit Graph
500 Commits
Author SHA1 Message Date
Andreas Svensson 41d5cee44e Simplified and improved test-cases for ReactMultiChildText-test 2014-08-05 23:40:11 +02:00
Paul O’Shannessy 0a1c5dad67 Merge pull request #1758 from spicyj/setimmediate
Add ReactUpdates.setImmediate for async callbacks
2014-07-29 20:15:31 -07:00
Sebastian MarkbageandPaul O’Shannessy c6b2687bbd Partially revert React.createDescriptor
We still have some issues to work out when the type argument is a mock.
2014-07-25 16:48:10 -07:00
Cheng Lou af21aeb59f Merge pull request #1924 from spicyj/autobind-bind
Use .bind when autobinding
2014-07-25 01:34:15 -07:00
Paul O’Shannessy f76d4dd48f Merge pull request #1770 from eins78/master
Also list <form> in error message as possible culprit
2014-07-24 12:53:19 -07:00
Ben Alpert f1508c4937 Use .bind when autobinding
This eliminates all of the `boundMethod` frames from call stacks when debugging and as far as I know should behave the same otherwise.

Test Plan: jest
2014-07-24 12:11:19 -07:00
Cheng Lou b0945b16cc Merge pull request #1560 from spicyj/simplify-lifecycle
Simplify composite lifecycle state
2014-07-23 18:02:39 -07:00
Ben Alpert 12b532c253 Add ReactUpdates.setImmediate for async callbacks
Callbacks passed to this setImmediate function are called at the end of the current update cycle, which is guaranteed to be asynchronous but in the same event loop (with the default batching strategy).

This is useful for new-style refs (#1373, #1554) and for fixing #1698.

Test Plan: jest
2014-07-21 22:41:00 -07:00
Ben Alpert 6259d88f03 Simpler way to prevent flushing updates on server
Test Plan: Only failing tests in jest are immutable tests that were already failing.
2014-07-21 17:25:52 -07:00
robarnold 83e5e9bedf Fix small issue in ReactContext comment
Noticed this the other day and meant to fix it.
2014-07-19 19:09:35 -07:00
Sebastian MarkbageandPaul O’Shannessy c419cce5c9 Move defaultProps resolution to the descriptor factory
Moves the defaultProps resolution to the descriptor factory.
2014-07-18 22:01:36 -07:00
Sebastian MarkbageandPaul O’Shannessy 3a7dbe6b73 Deprecate transferPropsTo 2014-07-18 22:01:36 -07:00
Paul O'ShannessyandPaul O’Shannessy de711efcc9 When proxying statics functions, copy properties
Port of 076047012a which went in
externally before ReactLegacyDescriptor happened, so it needed to be
ported.
2014-07-18 22:01:36 -07:00
Sebastian MarkbageandPaul O’Shannessy 5aab0bddaa Move key/ref off props and prepare for new descriptor factories
Breaking changes

- key/ref are no longer accessible on props but they are accessible on the
  descriptors. This means that parents/owners can access it but not the
  component itself.

- Descriptor factories are now plain functions and you can't rely on the
  prototype or constructors of descriptors to identify the component type.

Existing descriptor factories are now wrapped in a legacy factory. Currently it
does nothing but it will give us a hook to track callers to factories that are
not using JSX but just invoking the function directly. It also proxies static
methods/properties to the underlying class. The newer factories don't have this
feature.

ReactTextComponent has it's own little factory because it's props is not an
object. This is a detail and will go away once ReactTextComponent no longer
needs descriptors.
2014-07-18 22:01:36 -07:00
Ben Alpert 54d91c293d Don't initialize reconcile transaction on server
...when calling setState from within a componentWillMount. Fixes #1866.

Test Plan: jest
2014-07-18 11:03:34 -07:00
Ben Alpert 076047012a When proxying statics functions, copy properties
Test Plan: jest
2014-07-15 15:09:16 -07:00
Max F. Albrecht bcea3bee45 Also list <form> in error message as possible culprit 2014-07-08 14:08:17 +02:00
Cheng Lou e10d10e31e Merge pull request #1531 from spicyj/two-face
Give useful error when using two copies of React
2014-07-03 14:45:23 -07:00
Ben Alpert 70bf3e1306 Give useful error when using two copies of React
If we don't error here, we end up with a confusing error later on in this.getDOMNode() where ReactMount doesn't have the proper container registered in its object.
2014-07-03 14:20:31 -07:00
Ben Alpert c8d9957f68 Fix spelling/grammar in test comment 2014-07-02 14:09:38 -07:00
Yuval DekelandPaul O’Shannessy 40b522c498 Give context for owners of compenent instantiations with propType errors
See modification to the test-file: Basically we add a small hint at the end
of the error warning for propType errors to help identify which instantiation
of the component at hand is faulty.
2014-07-02 12:47:26 -07:00
Paul O'ShannessyandPaul O’Shannessy a4e5327b76 Remove jest usage in ReactDescriptorTest
Until we're only using jest on github, we should stick with Jasmine spies. Soon, hopefully.
2014-06-30 20:55:19 -07:00
Ben Alpert cb20dec85f Simplify composite lifecycle state
We now forbid calling setState or forceUpdate if any component's render function is higher in the stack, not just the component you're trying to update. (We do this already now for React.renderComponent and React.unmountComponentAtNode.)

This also has the advantage that we can now remove CompositeLifeCycle.RECEIVING_STATE, making _compositeLifeCycleState easier to reason about (not to mention that RECEIVING_STATE was a confusing name) and making it possible to remove a try/finally from the render path which might help with perf.
2014-06-28 01:04:04 -07:00
Mariano Desanze bb1a31930b Wrapped line to 80 chars in ReactPropTypes sample 2014-06-28 04:33:45 -03:00
Mariano Desanze 9854be2e46 Fix to sample code for href in ReactPropTypes
Error should be thrown in the previous condition is "not" meet. And the href propType is described as optional in the comment, but the null check was missing.
2014-06-27 11:50:03 -03:00
Sebastian MarkbageandPaul O’Shannessy ef67406272 Add simple React.createDescriptor hook
This is the minimal runtime change we need to switch the JSX syntax to resolve
to React.createDescriptor(...)
2014-06-26 15:42:18 -07:00
Sebastian MarkbageandPaul O’Shannessy d0719a5ea4 Preparing to move defaultProps resolution and type validation to the descriptor
This copies the propType and contextType validation to a wrapper around the
descriptor factory. By doing the validation early, we make it easier to track
down bugs. It also prepares for static type checking which should be done at the
usage site.

This validation is not yet active and is just logged using monitorCodeUse. This
will allow us to clean up callsites which would fail this new type of
validation.

I chose to copy the validation of abstracting it out since this is just an
intermediate step to avoid spamming consoles. This makes more a much cleaner
diff review/history. The original validation in the instance will be deleted as
soon as we can turn on the warnings.

Additionally, getDefaultProps are moved to become a static function which is
only executed once. It should be moved to statics but we don't have a
convenient way to merge mixins in statics right now. Deferring to ES6 classes.

This is still a breaking change since you can return an object or array from
getDefaultProps, which later gets mutated and now the shared instance is
mutated. Mutating an object that is passed into you from props is highly
discouraged and likely to lead to subtle bugs anyway. So I'm not too worried.

The defaultProps will later be resolved in the descriptor factory. This will
enable a perf optimizations where we don't create an unnecessary object
allocation when you use default props. It also means that ReactChildren.map
has access to resolved properties which gives them consistent behavior whether
or not the default prop is specified.
2014-06-26 15:40:12 -07:00
Andreas Svensson b36e05b0af Fix ReactEmptyComponent disappearing and throwing in IE8 2014-06-20 10:08:49 +02:00
Paul O’Shannessy 92e3384cd2 Merge pull request #1513 from danielschonfeld/shouldcomponentupdate-boolean
Warn if shouldComponentUpdate returns anything other than true/false
2014-06-18 11:29:31 -07:00
Marshall RochandPaul O’Shannessy a6cd945d9f Fix 'this' in static methods
binds static methods on the descriptor to the component's actual constructor, so that `foo.constructor.bar()` and `Foo.bar()` run with the same `this`.
2014-06-14 20:37:51 -07:00
Cheng Lou 4329d5ac38 Merge pull request #1611 from mathieumg/master
Added 'objectOf' PropType validator to iterate on objects and validate properties.
2014-06-12 20:19:33 -07:00
Mathieu M-GosselinandMathieu M-Gosselin 4852c30d62 Added 'objectOf' PropType validator to iterate on object literals and
validate properties.
2014-06-11 21:12:05 -04:00
Cheng Lou 36f2999d47 Merge pull request #1660 from spicyj/test-ie10-proptypesname
Fix PropTypes test in IE10
2014-06-11 10:34:28 -07:00
Ben Alpert 8e2dcceee3 Merge pull request #1597 from spicyj/defaultprops-autobind
Auto-bind before getDefaultProps
2014-06-11 10:14:31 -07:00
Ben Alpert 7cd5e9b399 Fix PropTypes test in IE10
Test Plan: Ran the test in jest, phantomjs, IE10, Chrome, and Firefox.
2014-06-07 18:56:28 -07:00
Fred ZhaoandPaul O’Shannessy 50516585a4 Update findComponentRoot and processUpdates warnings for SVG
I ran into a really difficult-to-debug issue with a React app with SVG
elements. Christopher sat down with me for a while and we finally figured out
that the browser was moving non-SVG elements out of a parent `<svg>` node which
triggered the `processUpdates()` invariant. This updates the error message
thrown from there to include this scenario in the possible issues list.
2014-05-28 18:19:49 -07:00
Ben Alpert 8a460ba2e8 Auto-bind before getDefaultProps
Fixes #1595.
2014-05-25 00:40:39 -07:00
Paul O’Shannessy f9ad17db65 Merge pull request #1363 from spicyj/batch-all
Batch subupdates caused by any state update
2014-05-22 15:28:48 -07:00
Ben Alpert e17086e5df Add componentWillReceiveProps setState test 2014-05-19 15:58:40 -07:00
Ben AlpertandPaul O’Shannessy 6c331fba07 Add hasOwnProperty checks where appropriate
For boolean-like objects, I've added hasOwnProperty checks in addition to the existing truthiness check even though for most of these dicts, we leave out false keys instead of setting them explicitly to false.

In DOMPropertyOperations, we don't need to check hasOwnProperty if the property is in isStandardName because (with the exception of getPossibleStandardName) the dicts on DOMProperty will now be consistently populated with every valid attribute.
2014-05-16 10:59:51 -07:00
Daniel Schonfeld 7d91277a50 warn when shouldComponentUpdate() returns undefined 2014-05-13 22:44:00 -04:00
Ben Alpert 808a54f410 Batch subupdates caused by any state update
With this, multiple setState calls triggered by a componentDidUpdate handler (or similar) will be batched together, regardless of if the original setState call was in a batching context.

I also cleaned up some inconsistencies with the order of component updates and callbacks in situations where one component's update directly causes another to update.

Fixes #1147. Helps with #1353 and #1245 as well, though doesn't completely fix them yet.

Test Plan:
grunt test
2014-05-13 10:50:26 -07:00
Paul O’Shannessy a00199ddd2 Merge pull request #1358 from spicyj/one-transaction
Share reconcile transaction in batched updates
2014-05-13 10:47:03 -07:00
Paul O’Shannessy 88c94683d6 Revert "Move defaultProps resolution and type validation to the descriptor"
This reverts commit ff52e3df00.

Too many things broke with transferPropsTo
2014-05-06 09:09:51 -07:00
Sebastian MarkbageandPaul O’Shannessy ff52e3df00 Move defaultProps resolution and type validation to the descriptor
This copies the propType and contextType validation to a wrapper around the
descriptor factory. By doing the validation early, we make it easier to track
down bugs. It also prepares for static type checking which should be done at the
usage site.

This validation is not yet active and is just logged using monitorCodeUse. This
will allow us to clean up callsites which would fail this new type of
validation.

I chose to copy the validation instead of abstracting it out to a common abstraction. This is just an
intermediate step to avoid spamming consoles. The original validation in the instance will be deleted as soon as we can turn on the warnings at the callsite. Copy+Delete makes this a more a much cleaner diff review/history.

Additionally, getDefaultProps are moved to become a static function which is
only executed once. It should be moved to statics but we don't have a
convenient way to merge mixins in statics right now. Deferring to ES6 classes.

This is still a breaking change since you can return an object or array from
getDefaultProps, which later gets mutated and now the shared instance is
mutated. Mutating an object that is passed into you from props is highly
discouraged and likely to lead to subtle bugs anyway. So I'm not too worried.

The defaultProps are now resolved in the descriptor factory. This will enable
a perf optimizations where we don't create an unnecessary object allocation
when you use default props. It also means that ReactChildren.map has access to
resolved properties which gives them consistent behavior whether or not the
default prop is specified.

This is a breaking change since it can affect how mapping over children and
transferPropsTo works together with defaultProps.
2014-05-05 17:03:54 -07:00
Paul O’Shannessy d657479a9d Merge branch 'spicyj-nested-render' from #1402 2014-04-27 13:15:58 -07:00
Cheng LouandPaul O’Shannessy 8b23a7e699 Warn instead of throw for nested render calls 2014-04-27 13:15:42 -07:00
Cheng LouandPaul O’Shannessy 7fa656dae9 Don't let new keys on style from transferPropsTo override old ones
Previous behavior: `transferPropsTo(<div style={{color: 'red'}} />)` would get `color` overriden if we transfer in a `style={{color: 'blue'}}`. This is inconsistent with how other props are transfered.

This simply reverses the order of arguments.

closes #1435
2014-04-23 16:44:32 -07:00
Jan KassensandPaul O’Shannessy 9e9d8dbe76 fix warnings in ReactComponentLifeCycle test
Don't use inputs to avoid warnings in tests
2014-04-23 14:14:42 -07:00
Cheng LouandPaul O’Shannessy 4487831281 Allow false as an acceptable renderable type value
`false` is renderable.
2014-04-18 12:56:06 -07:00