Compare commits

..

1638 Commits

Author SHA1 Message Date
Paul O’Shannessy
b247f68b33 0.14.1 2015-10-28 14:21:05 -07:00
Paul O’Shannessy
6e2450e8f2 0.14.1 blog post 2015-10-28 14:03:59 -07:00
Paul O’Shannessy
c2dde8df0b Update readme for 0.14.1 2015-10-28 14:03:58 -07:00
Paul O’Shannessy
aaf8f870cb Update changelog for 0.14.1 2015-10-28 14:03:58 -07:00
Paul O’Shannessy
4952cd00d4 Merge pull request #5304 from evanvosberg/master
Add non-standard property for supporting Safari mask-icon.
(cherry picked from commit 2c176da7e8)
2015-10-28 12:44:30 -07:00
Ben Alpert
eadbf33296 Merge pull request #5237 from spicyj/gh-5125
Make sure top-level callback has correct context
(cherry picked from commit b0a7a00dba)
2015-10-28 12:44:27 -07:00
Paul O’Shannessy
12cafa7e00 Merge pull request #5297 from quadrupleslap/master
Mangle __html in prop validation.
(cherry picked from commit 517872817f)
2015-10-28 12:42:15 -07:00
Paul O’Shannessy
090c2dd833 Merge pull request #5250 from conorhastings/track-default-property
add default attribute for use with track element
(cherry picked from commit 4d41cf740a)
2015-10-28 12:42:15 -07:00
Ben Alpert
c469697ad7 Merge pull request #5263 from spicyj/npmreactreadme
Update addons paths in npm react README
(cherry picked from commit 8aaa66c292)
2015-10-28 12:42:15 -07:00
Paul O’Shannessy
d8a9cd365c Merge pull request #5174 from zpao/dom-attributes-track
Add srcLang and kind to better support track elements
(cherry picked from commit 8e9682c542)
2015-10-28 12:42:15 -07:00
Sebastian Markbåge
6323f03148 Merge pull request #5166 from spicyj/gh-5157
Add feature test for document.createEvent
(cherry picked from commit da1135618e)
2015-10-28 12:42:15 -07:00
Ben Alpert
6384e56d8d Merge pull request #5157 from spicyj/createevent
Use 'document.createEvent' not 'new Event'
(cherry picked from commit 194ab16d7b)
2015-10-28 12:42:15 -07:00
Paul O’Shannessy
84f6915315 Merge pull request #5164 from zpao/fix-csstransitiongroup-proptype
Correctly handle 0 in CSSTransitionGroup timeout props
(cherry picked from commit af99b2c2a3)
2015-10-28 12:42:15 -07:00
Ben Alpert
fdb2486b98 Merge pull request #5085 from spicyj/cdp
Extract defineProperty feature testing to one file
(cherry picked from commit 2253405dcc)
2015-10-28 12:42:15 -07:00
Ben Alpert
fb620be2b8 Merge pull request #5081 from spicyj/svg-tu
Don't break on SVG tags in scryRenderedDOMComponentsWithClass
(cherry picked from commit 4fb39ce984)
2015-10-28 12:42:15 -07:00
Paul O’Shannessy
0acdefb7cc Bump version for dev 2015-10-28 12:26:18 -07:00
Dean Shi
e0f74c6c6c Update README's example
According to current React version, when I use `React.render`, console shows `React.render is deprecated. Please use ReactDOM.render from require('react-dom') instead.`.

So this PR is a tiny update for the README example.
(cherry picked from commit 2b136a4f84)
2015-10-27 16:09:54 -07:00
Jim
8ab0651158 Added changelog for 0.14
(cherry picked from commit 72e70f345b)
2015-10-27 15:48:21 -07:00
Paul O’Shannessy
712c6cb1d8 Merge pull request #5289 from jonathanp/patch-1
Update 2015-05-01-graphql-introduction.md
(cherry picked from commit 0f76873ebb)
2015-10-27 15:45:49 -07:00
Paul O’Shannessy
e931e02a36 Merge pull request #5286 from translucens/add_reactdom_js
Add react-dom.js to tutorials
(cherry picked from commit 11919b6d90)
2015-10-27 15:45:44 -07:00
Paul O’Shannessy
6c84e3d410 Merge pull request #5089 from thomasp9/patch-1
Create 01-why-react.de-DE.md

(cherry picked from commit d17ad0f0c0)
2015-10-27 15:45:40 -07:00
Paul O’Shannessy
e8b5c75c0f Merge pull request #5274 from SpartaSixZero/master
Corrected highlighted line in tutorial example in tutorial7.js
(cherry picked from commit 56c91248fd)
2015-10-27 15:45:34 -07:00
Jim
b5524faa4b Merge pull request #5230 from kohashi/patch-1
Fix tutorial.ja-JP.md
(cherry picked from commit 1dafac9e0c)
2015-10-27 15:45:30 -07:00
Paul O’Shannessy
411726dcf1 Update blog posts linking to react-codemod
(cherry picked from commit 8848984c46)
2015-10-20 15:47:58 -07:00
Paul O’Shannessy
28f242d0b4 Merge pull request #5214 from benigeri/patch-1
small edit on reactiflux blog post
(cherry picked from commit 244dd5da4c)
2015-10-19 12:03:50 -07:00
Jim
5cc9abfe60 Merge pull request #5203 from WanderWang/docs-cn
update Chinese docs to 0.14
(cherry picked from commit 9cb01de1bc)
2015-10-19 10:30:36 -07:00
Paul O’Shannessy
348a37cc99 [docs] Don't make authors links on all posts page
(cherry picked from commit e12ee95e09)
2015-10-19 10:30:28 -07:00
Paul O’Shannessy
bed6aefc46 Merge pull request #5178 from jimfb/multiple-authors
Fix blog post authors
(cherry picked from commit ccfc2d8049)
2015-10-19 10:30:14 -07:00
Paul O’Shannessy
1e175d0858 Merge pull request #5176 from jimfb/tweak-props-change-wording
Tweak wording when talking about props changing
(cherry picked from commit ed7ab7b94a)
2015-10-19 10:29:12 -07:00
Paul O’Shannessy
193e4cf582 Fix up stray markdown in blog post
(cherry picked from commit 8f1ce99cc3)
2015-10-19 10:27:24 -07:00
Christopher Chedeau
b0aa296519 Reactiflux is moving to Discord blog post
Conflicts:
	docs/_data/authors.yml
2015-10-19 07:44:54 -07:00
Ben Alpert
b020e69edc Mention codemods more prominently in release blog
(cherry picked from commit 4a37796f88)
2015-10-13 10:50:48 -07:00
Jim
d69657bca4 Merge pull request #5142 from MaxPRafferty/add-selection-and-composition-events-on-reference-page
Add selection and composition events on reference page
(cherry picked from commit 37c71a6e1f)
2015-10-12 15:15:46 -07:00
Paul O’Shannessy
8812c6b678 Merge pull request #5124 from bhamodi/master
Documentation Cleanup Round 1.
(cherry picked from commit abaf0051de)
2015-10-12 15:15:40 -07:00
Paul O’Shannessy
60e30f1da4 Merge pull request #5126 from bhamodi/white-space
File Cleanup.
(cherry picked from commit 5dc2858bc9)
2015-10-12 15:15:35 -07:00
Paul O’Shannessy
e4300d951c Merge pull request #5123 from vipulnsward/fix-html-jsx-page
- Bring back JSX compiler styling still being used on HTML JSX page
(cherry picked from commit 0b21632f8e)
2015-10-10 19:26:52 -07:00
Jim
13f3cdeeb1 Merge pull request #5120 from abloomston/patch-1
Include react-dom
(cherry picked from commit 0b29035484)
2015-10-10 19:26:42 -07:00
Paul O’Shannessy
fe085c1cce Update Readme for 0.14 2015-10-09 17:54:03 -07:00
Jim
b71499e5f4 Added react-dom to individual downloads
(cherry picked from commit f6e09f1903)
2015-10-09 15:25:30 -07:00
Ben Alpert
df0dac72c2 Document context
Fixes #580.

(cherry picked from commit 28b10a9d6a)
2015-10-09 14:47:13 -07:00
Paul O’Shannessy
5f2a80c086 Revert "Merge pull request #5102 from TracyJordan/master"
This reverts commit 5039dad053.
2015-10-09 12:35:53 -07:00
Paul O’Shannessy
e21f1c7759 [docs] Fix line highlights for linked-state-mixin
(cherry picked from commit 09b688efce)
2015-10-09 12:33:54 -07:00
Ben Alpert
21588d900f Merge pull request #5107 from mbrookes/patch-1
Grammar
(cherry picked from commit 407e88d6c8)
2015-10-09 12:33:47 -07:00
Jim
5039dad053 Merge pull request #5102 from TracyJordan/master
Fixed some comment punctuation in ReactDOMComponent.js
(cherry picked from commit 1a7c0a4b16)
2015-10-09 12:33:40 -07:00
Paul O’Shannessy
b120cdafb2 Merge pull request #5101 from bcbcb/patch-1
[docs] fix forms Default Value example
(cherry picked from commit 3359e2f64c)
2015-10-09 12:33:35 -07:00
Jim
f93bb3aa6a Merge pull request #4981 from iamchenxin/zh_docs
[docs] Sync up tutorial.zh-CN with en(a440f40)
(cherry picked from commit e8be7013ba)
2015-10-09 12:33:30 -07:00
Paul O’Shannessy
ac2853b5d4 Merge pull request #5096 from songawee/docs_babel_fix
fix(docs): adjust babel release to match the babel.js changelog
(cherry picked from commit c511f161df)
2015-10-08 13:24:19 -07:00
Nick Presta
007cf55872 Add docs for React.Children.toArray in 0.14.0.
* Update the docs to change return type of `React.Children.map` from `object` to `array`.

(cherry picked from commit 319b374097)
2015-10-07 17:02:48 -07:00
Ben Alpert
ec7947979b Update downloads page for 0.14
(cherry picked from commit e1d4668fd5)
2015-10-07 13:04:48 -07:00
Paul O’Shannessy
24f7659b7c Merge pull request #5073 from mfunkie/patch-2
Update Pure Render Mixin docs to point to new npm package
(cherry picked from commit 926f372dc5)
2015-10-07 12:22:43 -07:00
Paul O’Shannessy
c2443c227c Final docs update for 0.14 2015-10-07 10:23:27 -07:00
Paul O’Shannessy
3603d45157 v0.14.0 2015-10-07 10:19:56 -07:00
Paul O’Shannessy
0811e63e22 [docs] Update acknowledgements for 0.14 2015-10-07 10:16:55 -07:00
Paul O’Shannessy
3917c04f16 npm shrinkwrap 2015-10-07 10:01:04 -07:00
Paul O’Shannessy
c8374d6db8 Merge pull request #4785 from zpao/0.14-authors
Update AUTHORS for 0.14
2015-10-07 09:50:42 -07:00
Paul O’Shannessy
e2211ab826 Update AUTHORS for 0.14 2015-10-07 09:49:10 -07:00
Ben Alpert
55cab74312 Merge pull request #5072 from spicyj/14blog
0.14 blog post
2015-10-07 09:46:44 -07:00
Ben Alpert
2bedb4ae96 Write 0.14 blog post 2015-10-06 23:59:20 -07:00
Ben Alpert
e292df781e Copy 0.14 RC blog post to 0.14 blog post 2015-10-06 23:19:50 -07:00
Ben Alpert
84dff0be5d Fix bower info in RC blog post
Fixes #5054.
2015-10-06 23:19:46 -07:00
Ben Alpert
1711c7aae3 Merge pull request #5065 from spicyj/docs-pkgs
Update some more docs for package split
2015-10-06 18:38:19 -07:00
Ben Alpert
26bde37cf8 Updat docs for refs/findDOMNode 2015-10-06 17:53:38 -07:00
Ben Alpert
0faf4b752f Update some more docs for package split 2015-10-06 17:36:16 -07:00
Jim
ff533cb4db Merge pull request #5055 from jimfb/reactdom-render
React -> ReactDOM for render() and findDOMNode()
2015-10-06 15:04:15 -07:00
Sebastian Markbåge
6d3a11e602 Merge pull request #4943 from bspaulding/throw-stateless-ref
Composite component throws on attaching ref to stateless component #4939
2015-10-06 14:33:48 -07:00
Jim
6446a45a00 Merge pull request #5062 from facebook/revert-4959-no-shams
Revert "Remove dependence on ES5 shams per #4189"
2015-10-06 14:30:26 -07:00
Jim
571edd85c2 Revert "Remove dependence on ES5 shams per #4189" 2015-10-06 14:30:03 -07:00
Jim
0b73099301 Merge pull request #4959 from dgreensp/no-shams
Remove dependence on ES5 shams per #4189
2015-10-06 13:57:49 -07:00
David Greenspan
f95747b929 Remove dependence on ES5 shams per #4189
Docs not updated
2015-10-06 13:49:47 -07:00
Bradley Spaulding
c6a3eb14db Wrapping StatelessComponent ref warning in __DEV__ block 2015-10-05 21:44:42 -07:00
Jim
712199ef98 React -> ReactDOM for render() and findDOMNode() 2015-10-05 17:46:58 -07:00
Jim
870a15adec Merge pull request #5056 from jimfb/reactdom-in-src
React->ReactDOM in src/
2015-10-05 16:30:25 -07:00
Jim
5a9dea00b9 React->ReactDOM in src/ 2015-10-05 16:29:33 -07:00
Ben Alpert
94ccda8543 Merge pull request #5041 from spicyj/val-key-err
Don't blow up in key warning for undefined type
2015-10-05 13:57:25 -07:00
Paul O’Shannessy
d1065355a9 Merge pull request #5045 from CoderK/master
rename renderSubtreeIntoContainer.js to renderSubtreeIntoContainer-test.js
2015-10-03 07:57:26 -07:00
KimCoding
f316839b90 rename renderSubtreeIntoContainer.js to renderSubtreeIntoContainer-test.js
To distinguish between testing file and implementation file.
2015-10-03 18:11:48 +09:00
Ben Alpert
1959aaa1f9 Don't blow up in key warning for undefined type 2015-10-02 11:31:28 -07:00
Jim
a71a06077f Merge pull request #5019 from jimfb/renderer-blog-post
Blog post for react render and top level API
2015-10-02 10:42:48 -07:00
Jim
e25753fdf1 Merge pull request #5038 from chicoxyzzy/docs-notation-fixes
make properties notation consistent over docs
2015-10-01 19:01:37 -07:00
chico
89e28a3fbe make properties notation in docs consistent 2015-10-02 03:44:47 +03:00
Paul O’Shannessy
95c5491781 Merge pull request #5001 from claudiopro/master
[docs] Italian localization of documentation
2015-10-01 14:46:21 -07:00
claudiopro
a4ec19500a Translate documentation to Italian 2015-10-01 23:40:14 +02:00
Paul O’Shannessy
9aa4546410 Merge pull request #5034 from zpao/fbjs-0.3
Update to fbjs@0.3
2015-10-01 14:33:40 -07:00
Paul O’Shannessy
693dd3567b Update to fbjs@0.3
As far as we're concerned, the only difference is that we moved some files from React to fbjs.
2015-10-01 14:30:05 -07:00
Ben Alpert
2a51d1bf93 Merge pull request #5016 from spicyj/tu-stateless
Make scry* look through stateless components
2015-10-01 14:13:32 -07:00
Jim
c0f951665d Blog post for react render and top level API 2015-10-01 14:12:01 -07:00
Sebastian Markbåge
4fa3ce48e8 Merge pull request #5021 from sebmarkbage/prototypetag
isReactClass -> .prototype.isReactComponent
2015-10-01 14:05:13 -07:00
Ben Alpert
3606702245 Merge pull request #5026 from chicoxyzzy/clarify-events-doc
clarify that events work for elements not for components
2015-10-01 10:49:25 -07:00
Jim
b53df5446e Merge pull request #5029 from jabbrass/patch-1
[docs] Fix typo in videos.md
2015-10-01 10:38:39 -07:00
J. Andrew Brassington
32b8135f94 [docs] Fix typo in videos.md
Line 111: "integate" =>  "integrate".
Thanks to all core contribs for open sourcing such a great tool!
2015-10-01 09:38:02 -07:00
Jim
1c385c0484 Merge pull request #5025 from chicoxyzzy/fix-event-methods-notation
fix methods notation of SyntheticEvent in docs
2015-10-01 06:18:50 -07:00
chico
e6314641ce fix isDefaultPrevented() and isPropagationStopped() methods of SyntheticEvent notation 2015-10-01 14:06:30 +03:00
chico
38a3150f62 clarify that events work for elements not for components 2015-10-01 14:00:05 +03:00
Jim
6dbdea15b2 Merge pull request #4964 from jimfb/stateless-functions-and-render-docs
Documentation for stateless functions/components, condensed two pages about refs into one
2015-09-30 20:59:29 -07:00
Jim
5ee8a93280 Added documentation for stateless components, condensed the two pages about refs into a single page. 2015-09-30 18:54:19 -07:00
Sebastian Markbage
83644185f4 isReactClass -> .prototype.isReactComponent
Put the flag on the prototype instead to help certain limited forms
of class extensions that doesn't properly transfer static properties.

Fixes #4836
2015-09-30 18:28:49 -07:00
Sebastian Markbåge
401e6f1058 Merge pull request #5020 from sebmarkbage/fixjestcli
Enforce NODE_ENV=test
2015-09-30 17:57:52 -07:00
Sebastian Markbage
41cba2e77b Enforce NODE_ENV=test
You could make the argument that this should be optional, but it doesn't
work without it so we might as well just enforce it.

Makes `jest` work by default.
2015-09-30 17:43:06 -07:00
Ben Alpert
29fbbe7263 Merge pull request #5017 from spicyj/gh-5005
Fix dev/prod mismatch in context === bailout
2015-09-30 17:05:25 -07:00
Ben Alpert
3ad5419ce5 Merge pull request #5018 from spicyj/ev-l-bool
Don't throw for onClick={false} in initial render
2015-09-30 17:05:20 -07:00
Ben Alpert
2b63601472 Don't throw for onClick={false} in initial render
I accidentally regressed this in #3246. Now this matches what we already checked for updates.
2015-09-30 16:53:47 -07:00
Ben Alpert
cf86cd8ebf Fix dev/prod mismatch in context === bailout
Fixes #5005.
2015-09-30 16:47:40 -07:00
Ben Alpert
7bd51659d6 Make scry* look through stateless components
Fixes #4882.
2015-09-30 16:00:21 -07:00
Paul O’Shannessy
249e0f7331 Merge pull request #5008 from james4388/patch-3
Add missing comma (,) between propTypes and render
2015-09-30 14:34:08 -07:00
Paul O’Shannessy
45b63c55a0 Merge pull request #4736 from yhagio/patch-1
Update 02-displaying-data.ja-JP.md
2015-09-30 14:22:53 -07:00
Paul O’Shannessy
cf0e6dfae7 Merge pull request #4980 from edvinerikson/add-window-document-note
Added a note about needing document globally available
2015-09-30 11:08:29 -07:00
Edvin Erikson
f9417a5da1 Added a note about needing document globally available
Added a note in ``10.4-test-utils.md` about needing window, document and
document.createElement globally available before importing React.
2015-09-30 14:28:57 +02:00
Trinh Hoang Nhu
3c56146a44 Add missing comma (,) between propTypes and render
Add missing comma (,) between `propTypes` and `render`
2015-09-30 03:48:51 -05:00
Ben Alpert
5a4b92d8c5 Merge pull request #5003 from spicyj/gh-4996
Improve warning for old element objects
2015-09-29 22:52:08 -07:00
Ben Alpert
35f731b012 Merge pull request #5002 from spicyj/check-no-warn-jest
Fail jest tests on any un-spied warnings
2015-09-29 22:51:47 -07:00
Ben Alpert
d561949711 Improve warning for old element objects
Fixes #4996.
2015-09-29 18:02:47 -07:00
Ben Alpert
b8c7b13042 Fail jest tests on any un-spied warnings
Originally #4223 -- we lost this when we switched to jest.
2015-09-29 17:35:39 -07:00
Ben Alpert
9a234e1d48 Merge pull request #4995 from gregrperkins/master
Rename TYPE_SYMBOL to REACT_ELEMENT_TYPE
2015-09-28 14:18:18 -07:00
Greg Perkins
c9320142ec Rename TYPE_SYMBOL to REACT_ELEMENT_TYPE
See D2454031 for context.
2015-09-28 14:11:40 -07:00
Ben Alpert
c512603a8c Merge pull request #4987 from spicyj/perf
Add unit test to ensure DOM mutations are instrumented
2015-09-28 11:48:18 -07:00
Paul O’Shannessy
1b5cd36f03 Merge pull request #4901 from zpao/npm-react-dom-dist
Build ReactDOM browser builds into react-dom/dist
2015-09-28 11:41:00 -07:00
Paul O’Shannessy
ed264b548b Merge pull request #4953 from zpao/test-utils-scry
Make ReactTestUtils.scryRenderedComponentWithClass find multiple classes
2015-09-28 10:31:21 -07:00
Paul O’Shannessy
e9c571acc6 Make ReactTestUtils.scryRenderedComponentWithClass find multiple classes 2015-09-28 10:06:54 -07:00
Ben Alpert
013bf16501 Merge pull request #4985 from mbrookes/patch-1
Correct the CSS example for 'appear' transition
2015-09-27 16:23:09 -07:00
Ben Alpert
7938650ca9 Make new perf unit test pass 2015-09-27 14:26:26 -07:00
Ben Alpert
47de0a8ce6 Add unit test to ensure DOM mutations are instrumented 2015-09-27 14:26:01 -07:00
Matt
208f20b787 Correct the CSS example for 'appear' transition
Move transition from `.example-appear` to `.example-appear.example-appear-active`
2015-09-27 17:33:16 +01:00
cpojer
2c973796e3 Add trailing commas to react-codemod output by default. 2015-09-26 22:58:45 +02:00
Paul O’Shannessy
ce8fed7592 Merge pull request #4893 from jw-00000/patch-1
Fix documentation of behavior of v0.12 and v0.13
2015-09-26 10:46:07 -07:00
JW
3b6697f177 Fix documentation of event propagation: 0.13 to 0.14 2015-09-26 12:31:48 +02:00
Vipul A M
1d4371a1d2 [docs] Replace JSXTransformer with babel/browser
Closes #4131
2015-09-25 20:13:19 -07:00
Paul O’Shannessy
d3d2504e72 Merge pull request #4846 from zpao/docs-use-babel
[docs] Remove references to react-tools, JSXTransformer, replace with Babel.
2015-09-25 20:06:47 -07:00
Paul O’Shannessy
105554fe5c [docs] Remove JSXTransformer, react-tools from downloads page 2015-09-25 17:58:07 -07:00
Paul O’Shannessy
bef8942cb7 [docs] Remove JSXTransformer from tutorial 2015-09-25 17:58:07 -07:00
Paul O’Shannessy
4d9c1d1126 [docs] Update script mimetypes: text/jsx -> text/babel 2015-09-25 17:56:42 -07:00
Paul O’Shannessy
097b32b7d2 [docs] Remove mentions of react-tools/jsx command 2015-09-25 17:56:42 -07:00
Paul O’Shannessy
411ed31cb1 [docs] Stop supporting our JSX compiler page
Link to Babel REPL directly instead.
2015-09-25 17:56:42 -07:00
Paul O’Shannessy
6ff4ba9512 Merge pull request #4978 from zpao/tutorial-server
[docs] Make the server required for the tutorial
2015-09-25 17:54:47 -07:00
Paul O’Shannessy
a440f40713 [docs] Make the server required for the tutorial 2015-09-25 17:52:45 -07:00
Bradley Spaulding
63cfcca74e Updated stateless ref warning message with more info 2015-09-25 16:21:59 -07:00
Ben Alpert
59466a0b52 Merge pull request #4977 from spicyj/gh-4870
Actually don't store <input> until mount-ready
2015-09-25 13:41:45 -07:00
Ben Alpert
6e62a010dd Actually don't store <input> until mount-ready
So #4976 was a lie. Fixes #4870 for real (thanks @STRML).
2015-09-25 13:39:05 -07:00
Ben Alpert
b82f3ab55d Merge pull request #4976 from spicyj/gh-4870
Don't store <input> instance until mount-ready
2015-09-25 13:30:01 -07:00
Ben Alpert
c04d10f033 Don't store <input> instance until mount-ready
Fixes #4870.

This more or less matches what we were doing with the old wrapper components (not storing until componentDidMount).
2015-09-25 13:20:40 -07:00
Ben Alpert
c05a6570ec Merge pull request #4975 from spicyj/gh-3285
Don't blow up on missing _store in element validation
2015-09-25 13:11:40 -07:00
Ben Alpert
e352475ddc Don't blow up on missing _store in element validation
Seems better to fail gracefully, especially now that we support inlining. If people do this by accident we can figure out how to add a helpful warning instead.

Fixes #3285.
2015-09-25 13:09:03 -07:00
Paul O’Shannessy
530b6332ed Merge pull request #4973 from zpao/lint-again
[lint] Update and fix
2015-09-25 13:05:38 -07:00
Paul O’Shannessy
7037ef9d8b [lint] Update and fix 2015-09-25 12:32:51 -07:00
Jim
4215002200 Merge pull request #4965 from iamchenxin/translate
[docs] Update zh-CN docs.
2015-09-25 11:34:05 -07:00
Jim
3936e3fddb Merge pull request #4967 from zhangjg/zhangjg-br
Translation  08.1-more-about-ref.md to Chinese
2015-09-25 11:33:36 -07:00
Sebastian Markbåge
8854a31e31 Merge pull request #4942 from darobin/rdfa-attributes
Add RDFa attributes not already covered (fixes #3459)
2015-09-25 09:32:40 -07:00
zhangjg
1dbde787d0 Published with https://stackedit.io/ 2015-09-25 09:34:37 +08:00
Paul O’Shannessy
707ffc74fd Merge pull request #4966 from zpao/examples-rm-server-rendering
[examples] Remove Server Rendering Example
2015-09-24 18:06:07 -07:00
iamchenxin
6094739757 [docs] Update zh-CN docs
Update
	09-tooling-integration.zh-CN.md
	10-addons.zh-CN.md
	10.1-animation.zh-CN.md
2015-09-25 06:55:34 +08:00
Paul O’Shannessy
c529e652bd [examples] Remove Server Rendering 2015-09-24 15:12:15 -07:00
Paul O’Shannessy
99b9ece565 Merge pull request #4914 from zpao/0.14-examples
Update examples for Babel, 0.14; remove 3rd party code
2015-09-24 15:11:40 -07:00
Paul O’Shannessy
3c0f46e3da [examples] Use refs instead of findDOMNode 2015-09-24 15:08:28 -07:00
Paul O’Shannessy
145ca279f9 [examples] Update basic-commonjs for new React, watchify 2015-09-24 15:08:28 -07:00
Paul O’Shannessy
f1ede3e6d2 [examples] Fix transtion example with timeout prop 2015-09-24 15:08:28 -07:00
Paul O’Shannessy
c475699d6b [examples] Use ReactDOM for appropriate APIs 2015-09-24 15:08:28 -07:00
Paul O’Shannessy
715dea085b [examples] Use Babel 2015-09-24 15:08:27 -07:00
Paul O’Shannessy
4d3d14af78 [exmaples] Remove local 3rd party code, use CDN (mostly) 2015-09-24 14:57:50 -07:00
Paul O’Shannessy
16608e3688 [examples] Assume es5 compatible browsers with console 2015-09-24 14:57:50 -07:00
Paul O’Shannessy
78b50485f6 Merge pull request #4853 from zpao/jsfiddle-babel
[docs] Add jsfiddle integration for Babel
2015-09-24 14:54:13 -07:00
iamchenxin
3fd7686d22 [docs] Update zh-CN docs.
add  08.1-more-about-refs.zh-CN.md
2015-09-25 03:11:58 +08:00
Bradley Spaulding
af79118148 attachRef to a stateless component warns instead of throwing #4939 2015-09-24 11:52:46 -07:00
Bradley Spaulding
8b4663d722 Renamed componentInstance to publicComponentInstance 2015-09-24 11:46:41 -07:00
Paul O’Shannessy
4b6e5d06cf Merge pull request #4961 from iamchenxin/en_docs
[docs] Fix syntac error
2015-09-24 09:48:34 -07:00
iamchenxin
82637eae45 Fix syntac error
Split {{ in example code to avoid an Exception in jekyll.
> Liquid Exception: Variable '{{' was not properly terminated with regexp: /\}\}/ in docs/10.1-animation.md
2015-09-24 23:46:22 +08:00
Jim
f988511b0a Merge pull request #4960 from iamchenxin/translate
[docs] Sync up zh-CN docs
2015-09-24 08:03:14 -07:00
iamchenxin
7a316ab034 [docs] Sync up zh-CN docs
Sync up with current en docs.
2015-09-24 22:48:20 +08:00
Paul O’Shannessy
1ce5ba4c56 Merge pull request #4956 from reggi/patch-1
doc: typo existant to existent
2015-09-24 01:35:28 -07:00
Thomas Reggi
648cb52b72 doc: typo existant to existent 2015-09-23 19:56:26 -04:00
Paul O’Shannessy
d12ec60dd5 Merge pull request #4658 from zpao/iojs
Upgrade to node@4, jest@0.5
2015-09-23 14:01:48 -07:00
Paul O’Shannessy
873e3a9816 Cleanup Jest preprocessor, use cache key 2015-09-23 13:46:41 -07:00
Paul O’Shannessy
8857e12c9e Use main document for getTestDocument
This should be fine in a jest environment, which is all we really care about now.
2015-09-23 13:46:41 -07:00
Paul O’Shannessy
2afc9a445f Upgrade to node@4, jest@0.5 2015-09-23 13:46:41 -07:00
Ben Alpert
ab03f34965 Merge pull request #4951 from spicyj/gh-4840
Improve traverseAllChildren object error message
2015-09-23 12:17:35 -07:00
Ben Alpert
1922db1711 Improve traverseAllChildren object error message
Fixes #4840.
2015-09-23 12:17:20 -07:00
Paul O’Shannessy
33e44f041b Merge pull request #4944 from zpao/rm-event-path
Remove SyntheticEvent.path
2015-09-23 10:03:19 -07:00
Ben Alpert
7398606ccf Merge pull request #4683 from JaeHunRo/master
temporarily fixes printWasted abnormality
2015-09-23 00:34:51 -07:00
Paul O’Shannessy
96b3ef54bf Merge pull request #4935 from saifelse/fix-firefox-dom-sel
Fix ReactDOMSelection to avoid erroring on Firefox's anonymous divs
2015-09-22 17:57:24 -07:00
JaeHunRo
6244a985c4 updates printWasted 2015-09-23 01:46:31 +01:00
Ben Alpert
b06be9bc2d Merge pull request #4946 from spicyj/nan
Improve error for style mutation
2015-09-22 16:34:05 -07:00
Ben Alpert
9faf1f3969 Improve error for style mutation
Fixes #4877. I opted not to change shallowEqual for this since it seems relatively one-off.
2015-09-22 16:29:40 -07:00
Ben Alpert
8c75e792ab Merge pull request #4945 from spicyj/nocatch-sim
Don't use magic browser event dispatching for simulated events
2015-09-22 15:41:00 -07:00
Ben Alpert
838b963f55 Merge pull request #4916 from spicyj/hwc
Add perf-counters npm module to scripts
2015-09-22 15:39:56 -07:00
Ben Alpert
57c516cb0e Don't use magic browser event dispatching for simulated events
When calling ReactTestUtils.Simulate, sometimes you want to test that an exception is thrown by the event handler. This lets you do that without relying on the fact that old jsdom doesn't implement `Event`.
2015-09-22 15:31:08 -07:00
Saif Hakim
0267cfbb8f Fix ReactDOMSelection to avoid erroring on Firefox's anonymous divs 2015-09-22 15:28:33 -07:00
Paul O’Shannessy
8a837cbd3f Remove SyntheticEvent.path 2015-09-22 15:12:19 -07:00
Ben Alpert
0f67febad7 Merge pull request #3069 from WickyNilliams/patch-1
document checkbox using click handlers for change events
2015-09-22 14:34:40 -07:00
Bradley Spaulding
650fa58ab9 Composite component throws on attaching ref to stateless component #4939 2015-09-22 14:28:38 -07:00
Robin Berjon
fd682b5cac add RDFa attributes not already covered 2015-09-22 16:58:48 -04:00
Paul O’Shannessy
06568114f3 Merge pull request #4931 from bspaulding/safe-taint-docs
Extracted "safe taint" in docs/homepage to align with best practice
2015-09-22 10:53:50 -07:00
Ben Alpert
c561324e7e Merge pull request #4903 from spicyj/event-unmounted
Just ignore events on unmounted components
2015-09-22 09:54:04 -07:00
Bradley Spaulding
52d8d3b2ff Extracted "safe taint" in docs/homepage to align with best practice #4212 2015-09-21 22:24:51 -07:00
Paul O’Shannessy
56ccd82374 Merge pull request #4921 from benjaffe/master
[docs] Clarify when autobinding does(n't) happens
2015-09-20 16:42:48 -07:00
Ben Jaffe
0203071251 Update 03-interactivity-and-dynamic-uis.md
This clarifies when autobinding does and does not happen. I spun my wheels on this for a while.

https://medium.com/@goatslacker/react-0-13-x-and-autobinding-b4906189425d
2015-09-20 09:38:50 -07:00
Ben Alpert
b3bccf2273 Add node bindings 2015-09-19 11:30:28 -07:00
Ben Alpert
e922f869e6 Make hardware-counter.cpp compile
`g++ -std=c++11 -lpthread src/hardware-counter.cpp
src/thread-local.cpp src/test.cpp` works and runs where `src/test.cpp` is:

```

int main() {
  bool enable = true;
  std::string events = "";
  bool recordSubprocesses = false;
  HPHP::HardwareCounter::Init(enable, events, recordSubprocesses);

  HPHP::HardwareCounter::s_counter.getCheck();

  int64_t start = HPHP::HardwareCounter::GetInstructionCount();
  volatile int x;
  for (int i = 0; i < 1000000; i++) {
    x += i;
  }
  int64_t end = HPHP::HardwareCounter::GetInstructionCount();

  printf("%d\n", end - start);
}
```
2015-09-19 11:00:27 -07:00
Ben Alpert
42e523ea4d Update license to match React repo license 2015-09-19 11:00:27 -07:00
Ben Alpert
cfbf115b26 Add hardware-counter.cpp and deps from HHVM 2015-09-18 22:10:10 -07:00
Paul O’Shannessy
ff542de59d Build ReactDOM browser builds into react-dom/dist 2015-09-18 14:02:31 -07:00
Ben Alpert
88cdc27618 Merge pull request #4904 from spicyj/npm-2
Don't install npm 3 on Travis
2015-09-17 21:23:41 -07:00
Ben Alpert
45f85a6cc5 Just ignore events on unmounted components
Fixes #4865 and also seems to fixes #3790.
2015-09-17 17:42:01 -07:00
Ben Alpert
41e4bfb41a Don't install npm 3 on Travis 2015-09-17 17:37:00 -07:00
Paul O’Shannessy
aac4219e80 Merge pull request #4899 from iamchenxin/master
Update zh-CN docs.
2015-09-17 12:22:04 -07:00
iamchenxin
2a5e6b3c91 Update zh-CN translation.
To keep up with en docs.
2015-09-18 02:31:11 +08:00
Paul O’Shannessy
e147c4942b [docs] Remove unused file 2015-09-16 14:09:52 -07:00
Paul O’Shannessy
d42254c40f Merge pull request #4891 from igncp/documentation-fix
Fix documentation errata
2015-09-16 13:48:09 -07:00
Ignacio Carbajo
e11631eea7 Fix documentation errata 2015-09-16 22:25:46 +02:00
Paul O’Shannessy
f9bbc06960 Merge pull request #4858 from zpao/eslint-1.4
Upgrade eslint to 1.4.1
2015-09-16 12:35:12 -07:00
Paul O’Shannessy
20f0b0f464 Upgrade eslint to 1.4.1 2015-09-16 12:16:46 -07:00
Paul O’Shannessy
0fb49fc4dc Merge pull request #4859 from zpao/stateless-arrow-functions
Support native arrow functions as stateless components
2015-09-16 12:02:38 -07:00
Paul O’Shannessy
e5c3fb14fa Support arrow functions as stateless components 2015-09-16 11:39:41 -07:00
Ben Alpert
2db38bf935 Merge pull request #4887 from spicyj/form-proptypes-dev
Check input and textarea propTypes only in DEV
2015-09-16 11:31:08 -07:00
Ben Alpert
65370ff752 Check input and textarea propTypes only in DEV 2015-09-15 21:46:37 -07:00
Paul O’Shannessy
a48ffb04dc Merge pull request #4884 from moretti/patch-1
[docs] Fix syntax errors in Animation
2015-09-15 11:30:20 -07:00
Paolo Moretti
fb45ef3679 Fix syntax errors 2015-09-15 18:12:42 +01:00
Paul O’Shannessy
609f14eed4 Merge pull request #4874 from brigand/patch-6
Clarifies "Fetching from the server"
2015-09-14 20:42:54 -07:00
Frankie Bagnardi
584a7c5f1c Clarifies "Fetching from the server" 2015-09-14 20:21:52 -07:00
Paul O’Shannessy
0bb906ed8c Merge pull request #4829 from zpao/docs-jekyll-feed
[docs] Use a generator to assign complete author data before generating site
2015-09-14 20:18:27 -07:00
Paul O’Shannessy
b0bf35a361 [docs] Use a generator to assign complete author data before generating site
This makes sure that `post.author` will be the actual data we want and we don't have to assign it every time, potentially messing it up.
2015-09-14 19:55:01 -07:00
Paul O’Shannessy
e97da42b67 Merge pull request #4868 from AnSavvides/docs-readability
Make docs more consistent
2015-09-14 13:10:57 -07:00
Paul O’Shannessy
b53dfa6d27 Merge pull request #4869 from arush/patch-1
DOCS - typo in ref callback example
2015-09-14 11:42:08 -07:00
arush
29551f84b8 DOCS - typo in ref callback example
deleted extra ending curly brace in arrow function
2015-09-14 11:40:44 -07:00
Christoph Pojer
95eee11b66 Merge pull request #4866 from andrewsokolov/bug/--no-explicit-require-didnt-works
[react-codemod] --no* options automatically set to false
2015-09-14 11:05:19 -07:00
Andreas Savvides
e04602f8ee Use same type of markdown as everywhere else for Glossary 2015-09-14 18:55:34 +01:00
Andreas Savvides
3c5a91c3c3 Make it easier to create an issue 2015-09-14 18:45:29 +01:00
Andreas Savvides
c207ab2901 Make "Component Specs and Lifecycle" more readable 2015-09-14 18:43:16 +01:00
Andreas Savvides
f98112f24d Make "Component API" more readable 2015-09-14 18:23:00 +01:00
Steven Luscher
15b57b1658 Merge pull request #4845 from steveluscher/community-roundup-27-relay-edition
Community Roundup #27 – Relay Edition
2015-09-14 08:14:43 -07:00
andrewsokolov
0610fd93b4 --no* options automatically set to false 2015-09-14 17:30:25 +03:00
Steven Luscher
f30b0d1f1c Community Roundup #27 – Relay Edition 2015-09-13 21:26:34 -07:00
Paul O’Shannessy
0cc8af37c3 Merge pull request #4861 from zpao/symbol-test-node4
Better simulate Symbol-less environment
2015-09-13 13:55:26 -07:00
Paul O’Shannessy
d54fa9e563 Better simulate Symbol-less environment
This ensures that our tests expecting Symbol not to exist pass.
2015-09-13 13:15:26 -07:00
Jim
2fcf54939b Merge pull request #4855 from iamchenxin/master
Maintain why-react-zh-CN sync to the current why-react
2015-09-12 08:57:31 -07:00
iamchenxin
d92f4782ac Update translation for jsx-in-depth-zh-CN 2015-09-12 18:09:58 +08:00
iamchenxin
787b49ae78 Maintain why-react-zh-CN sync to the current why-react 2015-09-12 16:29:46 +08:00
Paul O’Shannessy
4a45ad38b3 [docs] Add jsfiddle integration for Babel 2015-09-11 11:19:23 -07:00
Paul O’Shannessy
ed11f83763 Merge pull request #4833 from youngminz/master
Update Korean translation
2015-09-10 16:25:58 -07:00
Paul O’Shannessy
c6ecda7503 Merge pull request #4802 from 8398a7/patch-1
Update Japanese translation to 75fafe1
2015-09-10 15:35:06 -07:00
839
852753c13a Update Japanese translation to 75fafe1 2015-09-10 15:33:34 -07:00
Ben Alpert
4b3b56f36a Add Babel version to blog post 2015-09-10 13:28:46 -07:00
Ben Alpert
04e5ee70cc Merge pull request #4797 from spicyj/rc14blog
0.14 RC blog post
2015-09-10 09:50:56 -07:00
Ben Alpert
5bf56134be 0.14 RC blog post 2015-09-10 09:21:56 -07:00
Ben Alpert
4a4174b9e8 0.14.0-rc1 2015-09-10 08:47:40 -07:00
Ben Alpert
21a1f7e6fd Don't copy JSXTransformer in grunt release 2015-09-10 08:47:40 -07:00
Paul O’Shannessy
31f25255b9 Stop building JSXTransformer
Pick of/closes #4148.
2015-09-10 08:45:04 -07:00
Koo Youngmin
2ae036123c Update Korean translation 2015-09-10 16:47:15 +09:00
Sebastian Markbåge
7a00239b1f Merge pull request #4832 from sebmarkbage/xssfix
Use a Symbol to tag every ReactElement
2015-09-09 23:19:33 -07:00
Sebastian Markbage
031fc24dae Use a Symbol to tag every ReactElement
Fixes #3473

I tag each React element with `$$typeof: Symbol.for('react.element')`. We need
this to be able to safely distinguish these from plain objects that might have
come from user provided JSON.

The idiomatic JavaScript way of tagging an object is for it to inherent some
prototype and then use `instanceof` to test for it.

However, this has limitations since it doesn't work with value types which
require `typeof` checks. They also don't work across realms. Which is why there
are alternative tag checks like `Array.isArray` or the `toStringTag`. Another
problem is that different instances of React that might have been created not knowing about eachother. npm tends to make this kind of problem occur a lot.

Additionally, it is our hope that ReactElement will one day be specified in
terms of a "Value Type" style record instead of a plain Object.

This Value Types proposal by @nikomatsakis is currently on hold but does satisfy all these requirements:

https://github.com/nikomatsakis/typed-objects-explainer/blob/master/valuetypes.md#the-typeof-operator

Additionally, there is already a system for coordinating tags across module
systems and even realms in ES6. Namely using `Symbol.for`.

Currently these objects are not able to transfer between Workers but there is
nothing preventing that from being possible in the future. You could imagine
even `Symbol.for` working across Worker boundaries. You could also build a
system that coordinates Symbols and Value Types from server to client or through
serialized forms. That's beyond the scope of React itself, and if it was built
it seems like it would belong with the `Symbol` system. A system could override
the `Symbol.for('react.element')` to return a plain yet
cryptographically random or unique number. That would allow ReactElements to
pass through JSON without risking the XSS issue.

The fallback solution is a plain well-known number. This makes it unsafe with
regard to the XSS issue described in #3473. We could have used a much more
convoluted solution to protect against JSON specifically but that would require
some kind of significant coordination, or change the check to do a
`typeof element.$$typeof === 'function'` check which would not make it unique to
React. It seems cleaner to just use a fixed number since the protection is just
a secondary layer anyway. I'm not sure if this is the right tradeoff.

In short, if you want the XSS protection, use a proper Symbol polyfill.

Finally, the reason for calling it `$$typeof` is to avoid confusion with `.type`
and the use case is to add a tag that the `typeof` operator would refer to.
I would use `@@typeof` but that seems to deopt in JSC. I also don't use
`__typeof` because this is more than a framework private. It should really be
part of the polyfilling layer.
2015-09-09 23:19:00 -07:00
Ben Alpert
a05691f0ad Merge pull request #4747 from spicyj/gh-1939
Don't crash in event handling when mixing React copies
2015-09-09 22:10:19 -07:00
Ben Alpert
dc2570e1ce Merge pull request #4825 from spicyj/gh-2770
Preserve DOM node when updating empty component
2015-09-09 22:09:34 -07:00
Ben Alpert
14ede77123 Merge pull request #4827 from spicyj/occured
occured -> occurred
2015-09-09 16:29:43 -07:00
Ben Alpert
0b857a473a occured -> occurred 2015-09-09 16:19:40 -07:00
Ben Alpert
db589a7175 Preserve DOM node when updating empty component
Fixes #2770.
2015-09-09 14:00:59 -07:00
Ben Alpert
999b0f9b3e Refactor empty component handling
Now doesn't use ReactCompositeComponent and `._currentElement` is actually null/false.
2015-09-09 14:00:58 -07:00
Ben Alpert
3dbdb63a7d Merge pull request #4823 from spicyj/gh-4776
Don't try to iterate over non-objects
2015-09-09 12:55:20 -07:00
Ben Alpert
35b7fe175d Merge pull request #4821 from spicyj/dom-dist
Add react-dom to dist/ in npm package
2015-09-09 12:02:47 -07:00
Paul O’Shannessy
12b6f3d03c Merge pull request #4824 from facebook/prefill-stack-overflow-tag
Pre-fill tag when asking a Stack Overflow question
2015-09-09 11:31:00 -07:00
Steven Luscher
9ca4dd6024 Pre-fill tag when asking a Stack Overflow question 2015-09-09 11:28:14 -07:00
Ben Alpert
b004bc5f22 Don't try to iterate over non-objects
Fixes #4776.
2015-09-09 09:03:05 -07:00
Ben Alpert
a87c8555fa Merge pull request #4719 from djrodgerspryor/fix_css_transition_group_child_props
Fix transitionName prop-type on CSS transition group child

Closes #4719.
2015-09-09 08:35:44 -07:00
Ben Alpert
324bec17e3 Fix up style in #4719 2015-09-09 08:35:04 -07:00
Ben Alpert
0cce198c28 Merge pull request #4796 from spicyj/lazy-node
Fetch DOM node lazily for updates
2015-09-09 08:29:56 -07:00
Ben Alpert
cdd8096974 Add react-dom to dist/ in npm package 2015-09-09 07:58:28 -07:00
Daniel Rodgers-Pryor
91555f6f9e Fix name prop-type on CSS transition group child
And share it with the parent. There's now a test for varying class names by transition-type.
2015-09-09 23:21:15 +10:00
Paul O’Shannessy
6eda65209a Merge pull request #4818 from gdi2290/patch-1
Fix typo combatibility => compatibility
2015-09-09 00:52:19 -07:00
PatrickJS
ab0c84f53f Fix typo combatibility => compatibility 2015-09-09 00:47:01 -07:00
Paul O’Shannessy
77703dbb80 Merge pull request #4724 from AnSavvides/test-util-readability
Make definitions more readable & optional params more obvious
2015-09-09 00:02:18 -07:00
Paul O’Shannessy
011c2a2e07 Merge pull request #4793 from edvinerikson/document-svg-attributes
[docs] Updated SVG attributes
2015-09-08 23:24:54 -07:00
Paul O’Shannessy
2f1b08347c Fix lint warning in react-dom codemod 2015-09-08 23:06:25 -07:00
Paul O’Shannessy
b5b74c5f22 Fix travis cURL call 2015-09-08 22:56:59 -07:00
Paul O’Shannessy
69ab7145bc Merge pull request #4814 from zpao/build-react-dom-browser-2
Build react dom browser 2
2015-09-08 22:33:08 -07:00
Paul O’Shannessy
3e672017a7 Upload new build files to build server 2015-09-08 22:18:45 -07:00
Paul O’Shannessy
353a01cf5e Add react-dom to bower when releasing 2015-09-08 22:18:44 -07:00
Paul O’Shannessy
b2ca3349c2 Actually build react-dom file with the build 2015-09-08 22:18:44 -07:00
Paul O’Shannessy
135c554b23 Move headers to shared location, use grunt templates 2015-09-08 22:00:05 -07:00
Ben Alpert
e7ce46ff28 Don't crash in event handling when mixing React copies
Should fix #1939.

Test Plan:
With two copies of React, render a div using React1 and use that as a container to render a div with React2. Add onMouseEnter/onMouseLeave to both divs that log. Mouse around and see correct logs (as if each React was isolated), no errors.
2015-09-08 17:40:20 -07:00
Paul O’Shannessy
c0270a1673 Merge pull request #4798 from zpao/pull-out-version
Move version to standalone module in preparation for reuse
2015-09-08 16:30:05 -07:00
Ben Alpert
27996377e0 Fetch DOM node lazily for updates
Previously, we fetched the node once for every changed attribute. In my createElement diff, I changed it to fetch the node (once) regardless of if there were changes -- fetching it once only if there are changes is even better.
2015-09-08 14:53:41 -07:00
Paul O’Shannessy
58d62989bd Move version to standalone module in preparation for reuse 2015-09-08 10:18:41 -07:00
Ben Alpert
b01af40ae6 Merge pull request #4663 from spicyj/isreactclass
Require instantiable components to extend React.Component
2015-09-08 10:01:15 -07:00
Ben Alpert
f3b7749c37 Require instantiable components to extend React.Component 2015-09-08 10:01:13 -07:00
Paul O’Shannessy
2fa59aa2d2 Merge pull request #4787 from Simek/patch-5
simplify valid attribute regex in DOMPropertyOperations
2015-09-04 17:42:32 -07:00
Ben Alpert
be36dbd88d Merge pull request #4786 from jontewks/master
Resolve eslint error
2015-09-04 17:35:02 -07:00
Jon Tewksbury
87963c4d01 Resolve eslint error 2015-09-04 17:31:12 -07:00
Ben Alpert
4fb7df1733 Merge pull request #4767 from spicyj/com
Add react-to-react-dom codemod
2015-09-04 13:55:04 -07:00
Edvin Erikson
a3b0b7ca25 [docs] Updated SVG attributes
Added all properties listed in the SVGDOMPropertyConfig.js file to the SVG attributes
section in the docs.
2015-09-04 18:26:47 +02:00
Jim
48942b85ea Merge pull request #4788 from jontewks/html-attribute-docs
Update docs to match standard HTML attribute support
2015-09-04 03:04:58 -07:00
Jon Tewksbury
f445dd91b0 Update docs to match standard HTML attribute support 2015-09-03 22:59:29 -07:00
Bartosz Kaszubowski
f99c83ba06 simplify valid attribute regex in DOMPropertyOperations 2015-09-04 07:41:19 +02:00
cpojer
cfe0351b8f Do not codemod classes with invalid fields, fixes #4628 2015-09-03 17:04:19 -07:00
Ben Alpert
10ab0c8915 Merge pull request #2065 from crm416/container-warnings
Warn when passing invalid containers to render and unmountComponentAtNode
2015-09-03 17:00:55 -07:00
Ben Alpert
9d93693b2e Update wording and style for #2065 2015-09-03 17:00:16 -07:00
Charles Marsh
270a805369 Warn when passing invalid containers to render and unmountComponentAtNode 2015-09-03 17:00:11 -07:00
Ben Alpert
4139b2e223 Merge pull request #3942 from spicyj/el-plain-obj
Make ReactElement really a plain object and freeze it
2015-09-03 15:02:56 -07:00
Ben Alpert
750338ef47 Make ReactElement really a plain object
This should guarantee that the hidden class is the same after inlining.
2015-09-03 14:58:52 -07:00
Ben Alpert
189f42f56a Merge pull request #4781 from jontewks/master
Add console message to get devtools for firefox
2015-09-03 14:26:37 -07:00
Jon Tewksbury
a4bd998edc Update console messages regarding devtools 2015-09-03 14:16:26 -07:00
Paul O’Shannessy
341f26a662 Add insert_final_newline to editorconfig 2015-09-03 13:43:42 -07:00
Paul O’Shannessy
ea8e06283c Merge pull request #4780 from matchu/patch-1
avoid the phrase "key property"
2015-09-03 12:50:36 -07:00
matchu
6541903bc4 avoid the phrase "key property"
React components can be assigned a special property named `key`. Therefore, it's helpful to avoid the phrase "key property" unless you're talking about the `key` property :)

I'm not sold on the replacement phrase, though... I think it's solid, but two fancy words like "fundamental" and "invariant" next to each other just seem a bit unwelcoming xP then again, we're talking about some heavy technical stuff; if there aren't any lighter words that are equally precise, then these should probably stand.
2015-09-03 12:03:15 -07:00
Ben Alpert
566dba25ef Merge pull request #4773 from spicyj/new-dt-blog
New devtools blog post
2015-09-02 15:15:27 -07:00
Ben Alpert
f5bd8fc0ad New devtools blog post 2015-09-02 12:34:10 -07:00
Ben Alpert
fb7e566b12 Add react-to-react-dom codemod
I ran it over Facebook so it probably works.
2015-09-01 17:44:27 -07:00
Ben Alpert
697c09a26e Merge pull request #4759 from spicyj/devprod
Fix diverging behavior of ReactFragment in `__DEV__`
2015-09-01 17:35:14 -07:00
Ben Alpert
4b9c349fd0 Merge pull request #4702 from spicyj/react-mod-depr
Add deprecation warnings to React module
2015-09-01 14:40:48 -07:00
Ben Alpert
4d29125d39 Merge pull request #4764 from spicyj/pre-commit
Remove leftover env variable logic in pre-commit hook
2015-09-01 14:39:53 -07:00
Ben Alpert
c04d02e5e8 Add warnings to React module 2015-09-01 14:36:41 -07:00
Ben Alpert
c74977c091 Remove leftover env variable logic in pre-commit hook 2015-09-01 14:35:47 -07:00
Ben Alpert
b1e16b9d7e React -> ReactDOM in test files 2015-09-01 14:34:37 -07:00
Ben Alpert
d9d8aae33e Merge pull request #4763 from spicyj/pre-commit
Add linting pre-commit hook
2015-09-01 14:33:49 -07:00
Ben Alpert
31cb102650 Merge pull request #4762 from spicyj/ts
Make TypeScript test work with ReactDOM
2015-09-01 14:30:56 -07:00
Ben Alpert
25fec05ab4 Add linting pre-commit hook
Anyone who wants it will have to do

```
ln -s scripts/git/pre-commit .git/hooks/pre-commit
```

or similar.
2015-09-01 14:29:52 -07:00
Ben Alpert
589c8364b0 Make TypeScript test work with ReactDOM 2015-09-01 14:28:12 -07:00
Ben Alpert
7e5ce19a94 Fix diverging behavior of ReactFragment in __DEV__
We could also remove the return statements but this is not a hot path and this seems safer.
2015-09-01 13:27:17 -07:00
Paul O’Shannessy
9400b34363 Merge pull request #4746 from zpao/use-fbjs-lint
Use eslintrc from fbjs
2015-08-31 23:21:29 -07:00
Paul O’Shannessy
7645c07720 Use eslintrc from fbjs 2015-08-31 23:05:04 -07:00
Ben Alpert
2d63dfd73c Merge pull request #4755 from MichelleTodd/react-warnings-0.14
Update warning messages to use ReactDOM and ReactDOMServer as appropriate
2015-08-31 23:03:10 -07:00
Michelle Todd
719fe15b9e Update warning messages to use ReactDOM and ReactDOMServer as appropriate
Fixes #4710.

- `React.findDOMNode` => `ReactDOM.findDOMNode`
- `React.render` => `ReactDOM.render` or "top-level render" (depends on whether we're in DOM-specific usage or generic cases)
- `React.renderToString` => `ReactDOMServer.renderToString`
- `React.renderToStaticMarkup` => `ReactDOMServer.renderToStaticMarkup`
2015-08-31 22:55:27 -07:00
Paul O’Shannessy
f118e5ebe7 Merge pull request #4750 from zpao/fbjs-0.2
Upgrade to fbjs, fbjs-scripts @ 0.2
2015-08-31 22:47:02 -07:00
Ben Alpert
487cc586f7 Merge pull request #4731 from spicyj/map-one-pass
Make React.Children.map do one pass only
2015-08-31 18:52:51 -07:00
Ben Alpert
6013105a9c Make React.Children.map do one pass only
Changed: createFragment no longer includes nulls in its output (since toArray doesn't and they share code).

Changed: React.Children.map no longer warns for clashing keys; traverseAllChildren will later when rendering.

Also change the generated key format around to accomodate. My keys are probably not bulletproof but should definitely be safe against accidental collisions.
2015-08-31 18:47:09 -07:00
Paul O’Shannessy
52b4c9eabf Upgrade to fbjs, fbjs-scripts @ 0.2 2015-08-31 17:19:42 -07:00
Ben Alpert
dc4f011f57 Merge pull request #4735 from spicyj/shallow-error
Better error for invalid element when shallow rendering
2015-08-31 13:30:56 -07:00
Ben Alpert
0e2bf2fe75 Merge pull request #4744 from spicyj/gh-4635-f
Fix code style/grammar on synthetic event warning
2015-08-31 13:06:46 -07:00
Paul O’Shannessy
dc23faf64d Merge pull request #4739 from henrik/patch-1
docs: "also lets pass" -> "also lets you pass"
2015-08-31 11:44:29 -07:00
Ben Alpert
42602a8922 Fix code style/grammar on synthetic event warning 2015-08-31 11:32:12 -07:00
Jim
0ff65cc892 Merge pull request #4635 from edvinerikson/event-pooling-warning
Added warning when calling methods on a released event.
2015-08-31 10:49:01 -07:00
Henrik Nyh
01151c1dea docs: "also lets pass" -> "also lets you pass" 2015-08-30 10:19:34 +02:00
Ben Alpert
f641f29db0 Merge pull request #4737 from oliviertassinari/patch-1
[adler32] fix wrong name
2015-08-29 11:18:18 -07:00
Olivier Tassinari
0304051591 [adler32] fix wrong name 2015-08-29 19:07:36 +01:00
Yuichi Hagio
d724393f0e Update 02-displaying-data.ja-JP.md
1. Fixed a spelling mistake to be more readable.
2. Removed the English lines that were already translated below.
2015-08-29 14:02:06 -04:00
Ben Alpert
f4d7feb8be Better error for invalid element when shallow rendering
Fixes #4721, fixes #4730.
2015-08-28 18:21:30 -07:00
Ben Alpert
a7230de902 Merge pull request #4727 from spicyj/gh-4233
Make findDOMNode error clearer
2015-08-28 12:52:18 -07:00
Paul O’Shannessy
e53cee9af6 Merge pull request #4734 from zpao/reverse-logic
Reverse condition of a ternary for readability
2015-08-28 11:39:48 -07:00
Paul O’Shannessy
2e5b047f04 Reverse condition of a ternary for readability 2015-08-28 11:34:50 -07:00
Ben Alpert
024f71535c Merge pull request #4720 from spicyj/destructor
Add destructors to pooled classes in ReactChildren
2015-08-27 19:06:11 -07:00
Ben Alpert
16d8f20576 Add destructors to pooled classes in ReactChildren
And make destructors mandatory so we're less likely to forget again.
2015-08-27 19:05:56 -07:00
Paul O’Shannessy
bdc7ce9f01 Merge pull request #4482 from niole/issue4168
Add additional contextual information to invalid-style-prop warning
2015-08-27 18:13:29 -07:00
Niole Nelson
70c07c67b7 resolves issue #4168, style prop error now names React class that erroring element is a child of. 2015-08-27 18:10:51 -07:00
Ben Alpert
8b967052d8 Merge pull request #4732 from spicyj/eslint-undef
Enable no-undef for eslint
2015-08-27 18:07:51 -07:00
Ben Alpert
75873707f9 Enable no-undef for eslint 2015-08-27 18:03:14 -07:00
Andreas Savvides
807c62851c Make definitions more readable & optional params more obvious 2015-08-27 16:32:07 +01:00
Ben Alpert
72d5b8f116 Merge pull request #4700 from spicyj/frag-array
Make createFragment return an array, disallow objects as children
2015-08-26 11:12:06 -07:00
Ben Alpert
127917d454 Merge pull request #4701 from spicyj/gh-4525
Add deprecation notice for React.addons.batchedUpdates
2015-08-25 11:40:33 -07:00
Ben Alpert
d4f38933f2 Merge pull request #4703 from spicyj/rarr
Clarify use of arrow functions
2015-08-25 11:38:13 -07:00
Ben Alpert
66881ae083 Fix formatting in test utils docs 2015-08-25 09:47:38 -07:00
Edvin Erikson
34af8f8597 Added warning when calling methods on a released event. 2015-08-25 14:45:56 +02:00
Ben Alpert
d15938cd92 Clarify use of arrow functions
Per 1db20999f0 (commitcomment-12865588).
2015-08-24 17:21:10 -07:00
Ben Alpert
e64b402df9 Add deprecation notice for React.addons.batchedUpdates
Fixes #4525.
2015-08-24 16:20:56 -07:00
Ben Alpert
6a2cdd58a4 Make findDOMNode error clearer
Fixes #4233.
2015-08-24 16:15:44 -07:00
Ben Alpert
6abf025d46 Make createFragment return an array, disallow objects as children 2015-08-24 16:09:08 -07:00
Paul O’Shannessy
10c8166043 Merge pull request #4682 from lyip1992/patch-2
Update Gruntfile.js
2015-08-22 16:11:04 -07:00
Paul O’Shannessy
27e5a563db Merge pull request #4684 from lyip1992/patch-3
Update 10.1-animation.md
2015-08-22 16:10:05 -07:00
Paul O’Shannessy
d5e5261e38 Merge pull request #4686 from lyip1992/patch-5
Update 06-transferring-props.md
2015-08-22 16:09:02 -07:00
Paul O’Shannessy
7dbcff2df4 Merge pull request #4687 from lyip1992/patch-6
Update 04-multiple-components.md
2015-08-22 16:08:27 -07:00
Paul O’Shannessy
cca1065183 Merge pull request #4688 from lyip1992/patch-7
Update 02.3-jsx-gotchas.md
2015-08-22 16:08:02 -07:00
Paul O’Shannessy
adfbc64d4b Merge pull request #4685 from lyip1992/patch-4
Update 08.1-more-about-refs.md
2015-08-22 16:07:20 -07:00
Leon Yip
71454365f2 Update 02.3-jsx-gotchas.md
Fix typo.
2015-08-22 00:57:51 -07:00
Leon Yip
2f4ea60571 Update 04-multiple-components.md
Added an extra word to make the sentence read a little easier.
2015-08-22 00:56:23 -07:00
Leon Yip
f8fe717ea2 Update 06-transferring-props.md
"This ensures that" sounds a better than "That ensures that." This change is just my personal opinion, so I totally understand my change doesn't get merged.
2015-08-22 00:51:38 -07:00
Leon Yip
3849710d8b Update 08.1-more-about-refs.md
Change render to `render()` for consistency within the paragraph.
2015-08-22 00:46:18 -07:00
Leon Yip
c0e21d1b85 Update 10.1-animation.md
Changed "if" to "even when" for clarity.
2015-08-22 00:42:25 -07:00
Leon Yip
e99e8b66b2 Update Gruntfile.js
Added punctuation to make the comment consistent with other comments.
2015-08-21 18:06:55 -07:00
Paul O’Shannessy
6508b1ad27 Merge pull request #4678 from ning-github/patch-1
Remove redundancy regarding 'latest React news'
2015-08-21 17:48:57 -07:00
Ning Xia
b629289cea Fix repetition by editing second sentence
edited based on paul's input
2015-08-21 16:33:20 -07:00
Jim
b36ee449cb Merge pull request #4679 from ning-github/patch-2
Fix typo
2015-08-21 13:28:33 -07:00
Ning Xia
3232a59743 Fix typo
Can not should be a single word: 'cannot'
2015-08-21 13:26:58 -07:00
Ning Xia
5ba1831d76 Remove redundancy regarding 'latest React news'
Previously, it repeated 'latest React news' when the first sentence already begins with the same words.
2015-08-21 13:00:24 -07:00
Ben Alpert
80b7391d64 Merge pull request #2081 from rexxars/search-input-attributes
Allow `results` and `autosave` attributes (WebKit/Blink)
2015-08-21 09:27:06 -07:00
Espen Hovlandsdal
75805e4835 Allow results and autosave attributes (WebKit/Blink) 2015-08-21 10:10:32 +02:00
Paul O’Shannessy
b38509cade Merge pull request #4540 from scottburch/ie8-fix
removed dangling comma that messes up loading in IE8
2015-08-20 14:37:20 -07:00
Paul O’Shannessy
0f963bb478 Merge pull request #4654 from zpao/checkversionsoninstall
Check for compatible node,npm versions on install
2015-08-20 14:36:09 -07:00
Ben Alpert
61962c1751 Capitalize Babel 2015-08-20 13:34:04 -07:00
Ben Alpert
cd268fdfcd Merge pull request #4546 from rgbkrk/patch-1
Update tooling docs to suggest babel
2015-08-20 13:16:11 -07:00
Kyle Kelley
009902bcd0 Update tooling docs to suggest babel
`react-tools` is deprecated, `babel` is our future

* https://facebook.github.io/react/blog/2015/06/12/deprecating-jstransform-and-react-tools.html
* https://babeljs.io/docs/usage/jsx/
2015-08-20 14:24:20 -05:00
Ben Alpert
5fa72c2659 Merge pull request #4666 from spicyj/prod
Add a simple production-mode sanity check test
2015-08-20 11:03:09 -07:00
Ben Alpert
102fafce7f Add a simple production-mode sanity check test 2015-08-19 22:26:42 -07:00
Ben Alpert
ea827eb39d Merge pull request #4561 from djrodgerspryor/css_transition_group_robust_cleanup
Robust animation-end handling in ReactCSSTransitionGroup
2015-08-19 19:15:51 -07:00
Daniel Rodgers-Pryor
6bd6ef208b ReactCSSTransitionGroup timeouts
As discussed in issue 1326
(https://github.com/facebook/react/issues/1326) transitionend events are
unreliable; they may not fire because the element is no longer painted,
the browser tab is no longer focused or for a range of other reasons.
This is particularly harmful during leave transitions since the leaving
element will be permanently stuck in the DOM (and possibly visible).

The ReactCSSTransitionGroup now requires timeouts to be passed in
explicitly for each type of animation. Omitting the timeout duration
for a transition now triggers a PropTypes warning with a link to the
updated documentation.
2015-08-20 11:38:27 +10:00
Ben Alpert
b88592a354 Merge pull request #4665 from spicyj/gh-2407
Ensure IE8 style expansion list is up to date
2015-08-19 17:38:32 -07:00
Ben Alpert
b126926390 Ensure IE8 style expansion list is up to date
In conjunction with #1953, fixes #2407. This seems to be all of the shorthand style properties that IE8 supports, excluding a few nonstandard ones.
2015-08-19 17:22:37 -07:00
Andreas Svensson
f4f22a0baa Apply CSS shorthand expansion to IE8 only
Closes #1953.
2015-08-19 17:17:51 -07:00
Ben Alpert
3de7a281de Merge pull request #4664 from spicyj/ref-docs
Spruce up refs docs
2015-08-19 16:34:44 -07:00
Ben Alpert
1db20999f0 Spruce up refs docs
Fixes #4651.
2015-08-19 16:14:35 -07:00
Ben Alpert
2f96d70087 Merge pull request #4660 from TylerBrock/patch-2
Clarify invocation order of componentDidMount
2015-08-19 11:13:24 -07:00
Paul O’Shannessy
17d5440751 Merge pull request #4567 from koba04/fix-set-boolean-properties
Fixed consistency of behavior boolean properties
2015-08-19 10:20:49 -07:00
Tyler Brock
1e10bb5923 Clarify invocation order of componentDidMount
OP is delivering on promise made here: https://discuss.reactjs.org/t/how-do-you-invoke-the-render-callback-in-jsx/1744
2015-08-19 10:04:34 -07:00
Paul O’Shannessy
50adfeb421 Merge pull request #4657 from zpao/abcorderevents
Re-sort some constants
2015-08-19 09:26:02 -07:00
Paul O’Shannessy
ec9b866bc0 Check for compatible node,npm versions on install
This is only for building React and doesnn't apply to production installs.
2015-08-18 23:45:12 -07:00
Paul O’Shannessy
eb056fcf5d Re-sort some constants 2015-08-18 22:33:51 -07:00
Ben Alpert
9c98a5998a Merge pull request #4656 from spicyj/jest-fast
hax to make jest fast
2015-08-18 21:45:42 -07:00
Ben Alpert
a8b6c8292b hax to make jest fast
Turns out jest is _incredibly_ slow at resolving require paths like `require('fbjs/lib/foo')`. Like several milliseconds per require. Really adds up when all our files require `invariant` and `warning`. Here's a temporary hack to make things fast again.

Test Plan:
```
npm test src/renderers/shared/reconciler/__tests__/ReactCompositeComponent-test.js
```

has a self-proclaimed runtime of ~8 seconds now instead of ~35 seconds.
2015-08-18 21:40:58 -07:00
Jim
2a82689e6e Merge pull request #4655 from levibuzolic/patch-1
Update Advanced Performance code examples so they would output values
2015-08-18 20:57:34 -07:00
Levi Buzolic
009f766d6e Update Advanced Performance code examples so they would output values
Noticed the code examples in *Advanced Performance* wouldn't be rendering the example props, this could lead to some minor confusion for new users.
2015-08-19 13:50:43 +10:00
Sebastian Markbåge
4a92860b00 Merge pull request #4089 from sebmarkbage/killowner
Don't use owner to determine if the auto-bailout should be used
2015-08-18 18:09:01 -07:00
Ben Alpert
81b4f7295d Merge pull request #4611 from spicyj/create-element
Use createElement instead of HTML generation
2015-08-18 18:04:54 -07:00
Ben Alpert
cfd6f7a1b8 Use createElement instead of HTML generation
Behind a feature flag. This is a relatively simple change; adopting this strategy universally would mean that we could clean up a lot of code but this doesn't attempt to restructure more than necessary.
2015-08-18 17:44:20 -07:00
Sebastian Markbage
9315517dec Don't use owner to determine if the auto-bailout should be used
I didn't realize that we actually special cased this. This is an
unfortunate heuristic but it helps minimize the harm that this optimization
does.
2015-08-18 17:33:13 -07:00
Ben Alpert
5375b503e9 Merge pull request #4652 from spicyj/no-isre
Remove _isReactElement
2015-08-18 16:41:45 -07:00
Ben Alpert
6663fb3135 Remove _isReactElement
As of this commit, we still support objects as maps so if anyone has an object with keys 'type' and 'props' this will change behavior, but otherwise this should be pretty safe.
2015-08-18 12:55:34 -07:00
Paul O’Shannessy
b4ee5b5bf1 Merge pull request #4451 from dmatteo/TestUtils.Simulate-docs
improve ReactTestUtils.Simulate documentation
2015-08-17 14:51:05 -07:00
Jim
d984b687ec Merge pull request #4634 from edvinerikson/event-pooling
Added documentation about pooled events
2015-08-17 14:33:33 -07:00
Jim
87530049f8 Merge pull request #4481 from dmatteo/Simulate.change-tests
add tests for React.addons.TestUtils.Simulate.change
2015-08-17 11:23:12 -07:00
Paul O’Shannessy
cac9c88978 Merge pull request #4641 from mik01aj/master
Updated the Performance tools doc page.
2015-08-17 11:01:10 -07:00
Paul O’Shannessy
b5a9cfc8b0 Merge pull request #4643 from yasaricli/master
Examples jquery-mobile thirdparty files move
2015-08-17 09:48:07 -07:00
Yasar icli
0c0119b70d examples jquery-mobile thirdparty files move 2015-08-17 13:43:33 +03:00
Mikolaj Dadela
75fafe1c0b Updated the Performance tools doc page.
Now it’s possible to read the page from top to the bottom without
asking oneself “Ok, but how do I get these measurements?”
2015-08-17 11:18:04 +02:00
Edvin Erikson
6793a7197e Updated event pooling note in docs 2015-08-15 21:47:59 +02:00
Edvin Erikson
1e3c3e1b6b Added documentation about pooled events 2015-08-15 17:03:21 +02:00
Paul O’Shannessy
56527cda64 Merge pull request #4631 from Simek/tiny-code-tweak-reactMultiChild
tiny code tweak in ReactMultiChild
2015-08-14 16:44:49 -07:00
Paul O’Shannessy
9257fbbadc Merge pull request #4632 from Simek/react-codemod-lint-fix
react-codemod lint fix
2015-08-14 16:43:44 -07:00
Bartosz Kaszubowski
f53b960741 react-codemod-lint-fix 2015-08-15 01:36:44 +02:00
Bartosz Kaszubowski
1ca77c6ae6 tiny code tweak in ReactMultiChild 2015-08-15 01:25:09 +02:00
Paul O’Shannessy
b4b028dec0 Merge pull request #4622 from jorrit/instanceofreporttype
Report the actual type when PropTypes.instanceOf fails
2015-08-14 11:05:57 -07:00
cpojer
989caa870d Support export default in the class codemod. 2015-08-14 10:27:31 -07:00
Merrick Christensen
5395c815de fix(es6-import-export): initial commit actually applying 2015-08-14 10:27:31 -07:00
Jorrit Schippers
cf6222dd71 Report the actual type when PropTypes.instanceOf fails 2015-08-14 17:46:24 +02:00
Jim
534e277c10 Merge pull request #4627 from tako-black/translate_top-level-api_to_japanese
Translate ref-01-top-level-api.md to Japanese
2015-08-14 05:14:53 -07:00
Kohei TAKATA
ae38ea9275 Translate ref-01-top-level-api.md to Japanese 2015-08-14 19:16:59 +09:00
Paul O’Shannessy
6708059b51 Merge pull request #4607 from hekar/add/html-table-summary-attr
Added support for more HTML attributes: `summary`
2015-08-13 21:28:50 -07:00
Hekar Khani
be1fc794f0 Added support for more HTML attributes: summary
This attribute is used on <table> to support screen readers.
It is deprecated, so take a look at <caption> instead.
2015-08-13 22:41:37 -05:00
Matthew Johnston
0b07fed32c ReactEurope roundup blog post 2015-08-13 17:14:17 -07:00
Ben Alpert
4d614cfc87 Merge pull request #4624 from Torwori/null-check-fix
Swap places of mounted and pending update checks
2015-08-13 14:48:56 -07:00
Paul O’Shannessy
6c84a57a2d Merge pull request #4610 from lili21/fix-component-api-doc
update component api docs
2015-08-13 13:08:28 -07:00
Paul O’Shannessy
6a9c789076 Merge pull request #4626 from yoshuki/fix-markdown-conversion
Fix Markdown conversion with marked
2015-08-13 13:02:32 -07:00
MIKAMI Yoshiyuki
47ce8ecacb Fix Markdown conversion with marked 2015-08-14 01:07:19 +09:00
Igor Scekic
0e834fabca swap places of mounted and pending update checks
prevents a type error if the component isn't mounted
2015-08-13 16:34:47 +02:00
Jim
d8998354ee Merge pull request #4623 from tako-black/translate_introduction_to_japanese
Translate 01-introduction.md to Japanese
2015-08-13 07:25:36 -07:00
Kohei TAKATA
edca54fb93 Translate 01-introduction.md to Japanese 2015-08-13 21:27:00 +09:00
li.li
f027ca8ca0 update component api docs 2015-08-13 15:34:21 +08:00
Paul O’Shannessy
530a30c1d5 Fix grammar in Relay blog post
Brings in #4617 properly
2015-08-12 12:09:24 -07:00
Paul O’Shannessy
1b7d6c381f Merge pull request #4619 from jaredly/beta-2
update devtools post to note beta 2
2015-08-12 11:53:25 -07:00
Jared Forsyth
3ed9581adb update devtools post to note beta 2 2015-08-12 11:29:41 -07:00
Jim
d7b59de1c3 Merge pull request #4613 from tako-black/translate_advanced-performance_to_japanese
Translate 11-advanced-performance.md to Japanese
2015-08-12 07:39:03 -07:00
Kohei TAKATA
239eb0fc23 Translate 11-advanced-performance.md to Japanese 2015-08-12 19:40:30 +09:00
Sebastian Markbåge
d3f338ff27 Fix typecheck 2015-08-12 00:32:52 -07:00
Ben Alpert
cb2f4de4ca Merge pull request #4609 from spicyj/warn-r2
Remove accidental .only
2015-08-11 18:20:05 -07:00
Ben Alpert
a54d321765 Remove accidental .only 2015-08-11 18:19:42 -07:00
Ben Alpert
dc5a5adfaf Merge pull request #4477 from mridgway/autobind-opt-out
Allow classes created with React.createClass to opt out of autobinding
2015-08-11 18:03:41 -07:00
Ben Alpert
655b82fb7b Merge pull request #3332 from spicyj/warn-r2
Warn with two copies of React
2015-08-11 17:17:53 -07:00
Ben Alpert
d002abf0e7 Warn with two copies of React 2015-08-11 17:15:02 -07:00
Jim
079a6b0092 Merge pull request #4470 from jimfb/ref-error-means-multiple-react
Added note about multiple Reacts, since this error commonly implies that.
2015-08-11 16:24:01 -07:00
Ben Alpert
6160216b22 Merge pull request #3650 from spicyj/toarray
Add React.Children.toArray
2015-08-11 16:13:51 -07:00
Ben Alpert
53d8bbddc7 Add React.Children.toArray 2015-08-11 16:13:40 -07:00
Jim
e984d2b7d2 Added note about multiple Reacts, since this error commonly implies that. 2015-08-11 12:59:55 -07:00
Joseph Savona
aa55a71c62 Relay Technical Preview - blog post
(cherry picked from commit cac6bc870d)
2015-08-11 12:46:37 -07:00
Sebastian Markbåge
2457823227 Merge pull request #4182 from sebmarkbage/fixguards
Move guards from auto binding to event dispatch
2015-08-11 12:05:08 -07:00
Sebastian Markbage
216026418c Simplify event dispatching
This simplifies event dispatching by removing the `return false` special
case for the SimpleEventPlugin which allow us to inline much more here
and the code becomes easier to follow.
2015-08-11 11:55:07 -07:00
Sebastian Markbage
16cc45156f Move guards from auto binding to event dispatch
This wraps a proper guard around event dispatching so that errors doesn't
interupt other event callbacks.

Instead we rethrow the first error after all callbacks have been invoked.

For DEV mode we use native event dispatching if available. This has the
benefit that caught exceptions show up in the dev tools even without caught
exceptions being turned on. Yet, all callbacks are guaranteed to fire.
2015-08-11 11:55:07 -07:00
Jim
1b67acc168 Merge pull request #4344 from jimfb/update-children-because-context
Don't skip reconcilation if context differs
2015-08-11 10:44:14 -07:00
Jim
bcd32768e6 Merge pull request #4602 from tako-black/update_tutorial_ja-JP
Change tutorial.ja-JP.md to use marked
2015-08-11 09:26:53 -07:00
Kohei TAKATA
1ceded865b Change tutorial.ja-JP.md to use marked 2015-08-11 22:54:36 +09:00
Paul O’Shannessy
7deab28347 Merge pull request #4598 from zpao/eslint-1.1
Upgrade ESLint, fix code
2015-08-10 21:11:23 -07:00
Ben Alpert
d1a2193127 Merge pull request #4587 from spicyj/stateless-fn
Minimal implementation of stateless components
2015-08-10 17:49:31 -07:00
Paul O’Shannessy
ecb34de574 Upgrade ESLint, fix code 2015-08-10 17:04:29 -07:00
Sebastian Markbåge
37ee03f29c Merge pull request #4596 from jaredly/add-source-self
adding __self and __source special props
2015-08-10 16:22:12 -07:00
Ben Alpert
cd15dc60b8 Merge pull request #4597 from spicyj/coco
Apply codemod for React -> ReactDOM split
2015-08-10 15:33:49 -07:00
Ben Alpert
9adcff442a Apply codemod for React -> ReactDOM split
Ran the codemod automatically then ran

```
codemod.py -m -d src '(var React\b[^\n]*;)\n\n(var ReactDOM)' '\1\n\2'
```

to clean up spacing of requires.
2015-08-10 15:24:30 -07:00
Ben Alpert
b98b6ea2ac Clean up files before automated codemod 2015-08-10 15:23:12 -07:00
Jared Forsyth
009b7c8ae1 adding __self and __source special props 2015-08-10 13:52:17 -07:00
Paul O’Shannessy
1e90de692e Merge pull request #4584 from jessebeach/jessebeach-reactComponentExpect-silent-fail
reactComponentExpect fails silently
2015-08-10 13:15:14 -07:00
Toru Kobayashi
eb4e44a3c9 Fixed consistency of behavior boolean properties 2015-08-09 17:00:37 +09:00
Sebastian Markbåge
2f079359e8 Merge pull request #4588 from sebmarkbage/ownersforcontext
Add property key names + type of value to fragment warning
2015-08-08 15:11:22 -07:00
Sebastian Markbage
754ee176d0 Add property key names + type of value to fragment warning
This provides useful context in the logs to help us filter out things like
{__html:...}.
2015-08-07 20:01:03 -07:00
Ben Alpert
f3440c0d6f Merge pull request #4581 from Youmoo/patch-1
Update 2015-05-01-graphql-introduction.md
2015-08-07 19:32:22 -07:00
Ben Alpert
5a7bd964b4 Minimal implementation of stateless components
Stateless pure-function components give us more opportunity to make performance optimizations. For now, we'll do a minimal implementation which has similar performance characteristics to other components in the interests of shipping 0.14 and allowing people to begin writing code using this pattern; in the future we can refactor to allocate less and avoid other unnecessary work.
2015-08-07 19:27:42 -07:00
Ben Alpert
3ec9f86573 Deduplicate logic in ReactElementValidator
Shouldn't be much change. Notably, this calls `.getName()` instead of trying to derive it manually, which is more consistent.
2015-08-07 18:53:42 -07:00
Ben Alpert
b927110fb2 Merge pull request #4585 from spicyj/disable-path
Disable event.path handling
2015-08-07 13:41:11 -07:00
Ben Alpert
016a1907e1 Disable event.path handling
Looks like #4558 isn't ready yet and we'd like an interim fix.
2015-08-07 13:33:42 -07:00
J. Renée Beach
39c3fb2b09 reactComponentExpect fails silently
```reactComponentExpect``` fails silently when passed an undefined  value. It calls ```ReactTestUtils.isCompositeComponent``` with the undefined value, in which a ```render``` property is accessed, throwing a prop on undefined not found error which isn't surfaced to jest.

```
TypeError: Cannot read property 'render' of undefined
        at Object.ReactTestUtils.isCompositeComponent (./react/test/ReactTestUtils.js:127:23)
        at new reactComponentExpect (./react/test/reactComponentExpect.js:46:20)
        at reactComponentExpect (./react/test/reactComponentExpect.js:40:12)
```

Expecting the passed-in instance to not be undefined surfaces this issue in the test runner.
2015-08-07 11:21:45 -07:00
Sebastian Markbåge
7f119d41c7 Merge pull request #4554 from chernysh/chernysh-added-docs-img-events
Added documentation for <img> events
2015-08-07 11:07:24 -07:00
youmoo
0a19e0c0e5 Update 2015-05-01-graphql-introduction.md
Or the alternative:

`REST is an acronym for Representational State Transfer, which is an architectural style rather than a formal protocol`.

Sorry , I'am not a native speaker:)
2015-08-07 14:11:03 +08:00
Ben Alpert
6871ec2e29 Merge pull request #4580 from spicyj/gh-4578
Fix missing change event target in old IE
2015-08-06 15:24:02 -07:00
Ben Alpert
264bc2e7f2 Fix missing change event target in old IE
Events have `.srcElement` in old IE, not `.target`.

Fixes #4578.
2015-08-06 15:08:59 -07:00
Sebastian Markbåge
375734731d Merge pull request #4579 from sebmarkbage/ownersforcontext
Only set the owner during flattening
2015-08-06 13:04:56 -07:00
Sebastian Markbage
9fc2f8de26 Only set the owner during flattening
This used to do the update as well, which could have side-effects that
rely on owner being null.
2015-08-06 12:57:17 -07:00
Jim
13acbd2424 Merge pull request #4577 from marjan-georgiev/add-stopOpacity-to-unitless-props
Add stop-opacity to unitless style properties
2015-08-06 10:19:27 -07:00
Marjan
2b4d98fa52 Revert change to docs/js/reactj.js 2015-08-06 19:16:29 +02:00
Marjan
0d8c3f9cba Add stop-opacity to unitless style properties 2015-08-06 16:46:13 +02:00
Sebastian Markbåge
7ffff573ae Merge pull request #4569 from sebmarkbage/ownersforcontext
Set the owner during traverseAllChildren
2015-08-05 22:46:08 -07:00
Sebastian Markbage
cd1ab32d2f Set the owner during traverseAllChildren
This is basically just adding some context to the warning in ReactFragment
so that we can more easily find the callers.
2015-08-05 21:04:52 -07:00
Ben Alpert
f7b9545c15 Merge pull request #4559 from salier/ie-selection
Use onSelect fallback in IE
2015-08-05 20:35:24 -07:00
Ben Alpert
bdfa948121 Fix lint 2015-08-05 20:34:48 -07:00
Paul O’Shannessy
e64fc51984 Merge pull request #4565 from koba04/remove-fasttest
Remove fasttest task. fasttest is not fast
2015-08-05 14:40:41 -07:00
Toru Kobayashi
656c2ef173 Remove fasttest task. fasttest is not fast 2015-08-05 19:00:23 +09:00
Isaac Salier-Hellendag
2ff7512975 Use onSelect fallback in IE
In response to https://github.com/facebook/react/issues/2722. Use the Firefox selection change fallback for IE.
2015-08-04 17:36:34 -07:00
Vadim Chernysh
56e9d4aa4d Added events documentation for <img> elements 2015-08-04 15:27:56 +03:00
Jim
c97ed7b804 Merge pull request #4552 from psibi/patch-1
Include Haskell language
2015-08-04 03:35:34 -07:00
Sibi
1c1cfe95ee Include Haskell language 2015-08-04 14:06:08 +05:30
Ben Alpert
b4f40ba95f Merge pull request #4473 from facebook/devtools-blog-post
[docs] Add blog post about the new devtools beta
2015-08-03 15:13:33 -07:00
Jared Forsyth
1343cc0c9b Add blog post about the new devtools beta 2015-08-03 14:55:05 -07:00
Paul O’Shannessy
3f6bca7b16 0.14.0-beta3 2015-08-03 14:24:24 -07:00
Paul O’Shannessy
da8fc4e91b Merge pull request #4545 from salzhrani/patch-2
Update addons.js
2015-08-02 21:05:45 -07:00
Jim
ff7996b58a Merge pull request #4381 from mikrofusion/clarify-main-ideas
clarify the two main ideas behind react.
2015-08-02 20:04:37 -07:00
Mike Groseclose
38818189a5 remove two ideas from why react to add clarity 2015-08-02 19:34:20 -07:00
Samy Al Zahrani
5f01a90954 Update addons.js 2015-08-02 16:12:34 +03:00
Jim
134e0700cd Merge pull request #4541 from marocchino/update-korean
Update Korean translation to e88c7bf
2015-08-01 10:43:11 -07:00
Scott Burch
1da2b29897 added suggested comment to get file to pass es-lint 2015-08-01 01:43:24 -07:00
Shim Won
28261783ed Update Korean translation to e88c7bf 2015-08-01 12:35:09 +09:00
Paul O’Shannessy
e88c7bf495 Merge pull request #4539 from zpao/fix-encrypted-media-event
Listen to encrypted event, not onencrypted
2015-07-31 17:49:33 -07:00
Paul O’Shannessy
b321925cfa Listen to encrypted event, not onencrypted 2015-07-31 17:08:57 -07:00
Scott Burch
0f1ecc3ae3 removed dangling comma that messes up loading in IE8 2015-07-31 16:36:04 -07:00
Christoph Pojer
2d239006c5 Merge pull request #4528 from cpojer/codemod-updates
Simplify react-codemod.
2015-07-31 10:33:12 -07:00
cpojer
2ae9921945 Simplify react-codemod. 2015-07-31 10:32:53 -07:00
Jim
50d73f9a13 Merge pull request #4537 from afhole/patch-1
Update 02.1-jsx-in-depth.md
2015-07-31 10:13:58 -07:00
Alastair Hole
72a1fd6ce5 Update 02.1-jsx-in-depth.md
'setup' is a noun, not a verb
2015-07-31 17:40:48 +01:00
Paul O’Shannessy
681bbb629f 0.14.0-beta2 2015-07-30 21:29:09 -07:00
Paul O’Shannessy
e9c53364e5 Update fbjs dependency 2015-07-30 21:28:11 -07:00
Paul O’Shannessy
617ba9c21a Merge pull request #4501 from zpao/build-more-addons
Build perf and test-utils addon npm packages
2015-07-30 13:29:50 -07:00
Paul O’Shannessy
3d197e2a88 Merge pull request #4010 from zpao/really-deprecate-react-tools
Remove react-tools
2015-07-30 10:29:20 -07:00
Paul O’Shannessy
94bc29b400 Remove react-tools completely 2015-07-30 10:15:36 -07:00
Paul O’Shannessy
d982d5e153 Move react-tools from root.
ReactTools is deprecated, it doesn't belong at the root of the project. We'll remove it after 0.14 but for now this moves it so that it's contained and not intermixed with the rest of the project. The currect behavior of copying src/ into the package is maintained.
2015-07-30 10:15:36 -07:00
Jim
cc98f83b53 Merge pull request #4370 from blainekasten/video-events
Add Video/Audio Media Events
2015-07-29 21:57:25 -07:00
blainekasten
bdf377ff02 Add MediaEvent Handlers for Video/Audio components 2015-07-29 23:25:01 -05:00
Jim
f46c631091 Merge pull request #4513 from jimfb/fix-global-events
Fixed global events (like enter/leave events) when event has path.
2015-07-29 16:59:31 -07:00
Paul O’Shannessy
7989b34dd4 Merge pull request #4512 from zpao/codeofconduct
Explicitly call out code of conduct in CONTRIBUTING
2015-07-29 13:17:10 -07:00
Jim
b3d5b7f8db Fixed global events (like enter/leave events) when event has path. 2015-07-29 11:42:04 -07:00
Paul O’Shannessy
48e47fd25b Merge pull request #4493 from dmatteo/scryRenderedDOMComponents.bug
ensure tags are upperCase before comparing. #4388
2015-07-28 18:41:00 -07:00
Paul O’Shannessy
e8d79c3548 Fix a couple lint issues as a followup for #3761 2015-07-28 17:49:53 -07:00
Paul O’Shannessy
edf4d24c49 Merge pull request #3761 from alexpien/CustomClassesForReactCSSTransitionGroup
Custom class names in ReactCSSTransitionGroup
2015-07-28 16:59:51 -07:00
Paul O’Shannessy
6eb5a15049 Merge pull request #3742 from mminer/order-css-vendor-prefixes
Treat boxOrdinalGroup and flexOrder as unitless
2015-07-28 16:44:14 -07:00
Paul O’Shannessy
b766c62bb9 Merge pull request #2664 from jasonwebster/patch-1
Add additional supported methods to event documentation
2015-07-28 16:09:23 -07:00
Paul O’Shannessy
d80b1b89ae Explicitly call out code of conduct in CONTRIBUTING 2015-07-28 13:49:00 -07:00
Paul O’Shannessy
8a81d0cea2 Note that npm >= 2.0.0 is required for building 2015-07-28 11:59:06 -07:00
Jim
98d4fde55c Merge pull request #4506 from tako-black/translate_perf_to_japanese
Translate 10.9-perf.md to Japanese
2015-07-28 08:51:51 -07:00
Kohei TAKATA
2392217f32 Translate 10.9-perf.md to Japanese 2015-07-28 17:54:10 +09:00
Paul O’Shannessy
a7da0f22c4 Merge pull request #4503 from jimfb/remove-npm-run-jest
Removed `npm run jest` script.  Users can use `npm test` instead.
2015-07-27 16:05:38 -07:00
Jim
6296d1cad2 Removed npm run jest script. Users can use npm test instead. 2015-07-27 16:03:59 -07:00
Jim
9b30176122 Merge pull request #4422 from jimfb/reconciler-cleanup
Cleaned up a few names in the reconciler.
2015-07-27 15:59:44 -07:00
Jim
a4459558c1 Cleaned up a few names in the reconciler. 2015-07-27 15:07:44 -07:00
Paul O’Shannessy
ff71d7a939 Build perf and test-utils addon npm packages 2015-07-27 15:04:38 -07:00
Paul O’Shannessy
9d4a805eb7 Merge pull request #4499 from zpao/update-fbjs
Update fbjs dependency
2015-07-27 14:26:07 -07:00
Paul O’Shannessy
be5c09c24d Update fbjs dependency
- remove a file that got moved over there
- update for renamed babel transform
2015-07-27 13:37:48 -07:00
Jim
fab001aa80 Merge pull request #4469 from KevinTCoughlin/kevintcoughlin/#4265
Fixes #4265 - Clarify React.render note in documentation
2015-07-27 11:06:58 -07:00
Jim
be39979460 Merge pull request #4495 from tako-black/translate_pure-render-mixin_to_japanese
Translate 10.8-pure-render-mixin.md to Japanese
2015-07-26 19:25:09 -07:00
Kohei TAKATA
21d1e0004e Translate 10.8-pure-render-mixin.md to Japanese 2015-07-27 11:22:45 +09:00
Kevin Coughlin
ee11412933 remove footnote reference asterisk, no longer needed 2015-07-26 21:35:12 -04:00
Domenico Matteo
cc02c22cb4 ensure tags are upperCase before comparing. #4388 2015-07-27 00:32:59 +02:00
Paul O’Shannessy
3056066ede Merge pull request #4486 from yangmillstheory/docfix
Fix grammar
2015-07-25 10:10:18 -07:00
Victor Alvarez
912d71c9ce Fix grammar 2015-07-25 10:08:23 -07:00
Jim
44997df9eb Merge pull request #4483 from marocchino/update-korean
Update Korean translation to 991c437
2015-07-24 21:15:22 -07:00
Shim Won
b2caf1e4e3 Update Korean translation to 991c437 2015-07-25 11:06:00 +09:00
Paul O’Shannessy
7b37f8ac36 Fix gulp 2015-07-24 14:41:34 -07:00
Domenico Matteo
94d536f2ef add tests for React.addons.TestUtils.Simulate.change 2015-07-24 22:26:33 +02:00
Paul O’Shannessy
991c437b93 Merge pull request #4167 from zpao/vendor2fbjs
Move vendor to fbjs package
2015-07-24 10:51:07 -07:00
Jim
f23fe004bb Merge pull request #4478 from tako-black/translate_update_to_japanese
Translate 10.7-update.md to Japanese
2015-07-24 05:15:23 -06:00
Kohei TAKATA
b13b9975b8 Translate 10.7-update.md to Japanese 2015-07-24 17:52:48 +09:00
Michael Ridgway
b1fc5f949d Allow classes created with React.createClass to opt out of autobinding 2015-07-23 18:07:00 -07:00
Paul O’Shannessy
6fc53e0438 Enable (and apply) global transforms with browserify
This ensures that we can consume code from npm that has our process.env pattern. Unfortunately we'll run the same transform on minified builds but it's pretty quick.
2015-07-23 17:52:58 -07:00
Paul O’Shannessy
83c88578e9 Replace grunt-jest with our own runner
This gives us more control
2015-07-23 17:52:58 -07:00
Paul O’Shannessy
1d0c1b1817 Use fbjs package from npm, gulp
This reworks a few things in building and distributing React. The biggest change is using fbjs to share dependencies with other libraries. We're also using Gulp for some build steps.
2015-07-23 15:48:02 -07:00
Paul O’Shannessy
ac5e5d789f Merge pull request #4367 from Simek/traverse-children-cleanup
traverseAllChildren code clarity
2015-07-23 14:48:23 -07:00
Paul O’Shannessy
bcfba9178f Merge pull request #4386 from AnSavvides/4369-walkthrough-clarification
[#4369] Make getting started a little less confusing
2015-07-23 13:45:33 -07:00
Paul O’Shannessy
ee410d68d6 Merge pull request #4395 from wibud/v0.0.1
add animationIterationCount in isUnitlessNumber
2015-07-23 13:44:08 -07:00
Paul O’Shannessy
e0b8597dbb Merge pull request #4474 from zpao/ts14
Lock typescript dep at 1.4
2015-07-23 13:33:14 -07:00
Paul O’Shannessy
458714ab2f Lock typescript dep at 1.4 2015-07-23 12:49:21 -07:00
Ben Alpert
d16481d0e7 Merge pull request #4453 from spicyj/react-dom
Rename ReactDOMClient to ReactDOM
2015-07-23 11:27:25 -07:00
Sebastian Markbåge
d1169b54dd Merge pull request #4466 from jimfb/path-events-in-detached-nodes
Use old event propagation if path is not reasonable (eg. detached DOM).  Fixes #4452
2015-07-23 11:05:33 -07:00
Jim
318c288bd3 Merge pull request #4472 from tako-black/translate_create-fragment_to_japanese
Translate 10.6-create-fragment.md to Japanese
2015-07-23 01:35:36 -07:00
Kohei TAKATA
2b35ba6f40 Translate 10.6-create-fragment.md to Japanese 2015-07-23 17:06:21 +09:00
Jim
42caf036e2 Merge pull request #4471 from Yeti-or/yeti-or.fix-docs
Docs: Fix jsx iife example
2015-07-22 21:04:59 -07:00
Vasiliy Loginevskiy
3ce58df87d Docs: Fix jsx iife example 2015-07-23 06:08:11 +03:00
Kevin Coughlin
60a081e66b remove markdown remnant & unnecessary whitespace 2015-07-22 22:26:03 -04:00
Paul O’Shannessy
e055a1a28a Merge pull request #4456 from zpao/babel58
Upgrade babel, babel-eslint; remove babel-core dep
2015-07-22 15:11:50 -07:00
Jim
054fa0e16b Use old event propagation if path is not reasonable (eg. detached DOM). Fixes #4452 2015-07-22 12:43:59 -07:00
Jim
b71ad1f600 Merge pull request #4460 from tako-black/enclose_variables_in_back_quote
Enclose variables in back quote
2015-07-22 09:00:58 -07:00
Jim
3dcc4b8b90 Merge pull request #4459 from tako-black/translate_clone-with-props_to_japanese
Translate 10.5-clone-with-props.md to Japanese
2015-07-22 09:00:16 -07:00
Kohei TAKATA
ae0f9189fc Enclose variables in back quote 2015-07-22 16:19:04 +09:00
Kohei TAKATA
2a81f1229a Translate 10.5-clone-with-props.md to Japanese 2015-07-22 16:12:08 +09:00
Ben Alpert
6c20271488 Rename ReactDOMClient to ReactDOM
This closer matches the npm package name and (I assume) is what we want to call it internally.
2015-07-21 19:30:09 -07:00
Paul O’Shannessy
ecb4433cc9 Upgrade babel, babel-eslint; remove babel-core dep 2015-07-21 17:23:52 -07:00
Jim
e10c873d09 Merge pull request #4455 from marocchino/update-korean
Update Korean translation to e928c65
2015-07-21 16:13:28 -07:00
Shim Won
dc56073d68 Update Korean translation to e928c65 2015-07-22 08:11:26 +09:00
Paul O’Shannessy
e928c65340 Merge pull request #4449 from zpao/lock-babel
Lock babel @ 5.6.x.
2015-07-21 14:09:47 -07:00
Domenico Matteo
97e219e785 improve ReactTestUtils.Simulate documentation 2015-07-21 22:27:20 +02:00
Paul O’Shannessy
ce8a152c49 Lock babel @ 5.6.x.
5.7 and 5.8 are having big issues with linting
2015-07-21 12:20:39 -07:00
Ben Alpert
6faa225fe8 Merge pull request #4447 from spicyj/tag-end
Pull out tag end regex
2015-07-21 12:00:45 -07:00
Ben Alpert
6fe034e6f9 Pull out tag end regex
For perf -- avoids allocating another object.
2015-07-21 11:53:13 -07:00
Paul O’Shannessy
82a9a5595e Merge pull request #4404 from jbonta/component_api_docs
Make component api docs clearer
2015-07-21 11:11:37 -07:00
Jim
f000fa564e Merge pull request #4443 from tako-black/translate_test-utils_to_japanese
Translate 10.4test-utils.md to Japanese
2015-07-21 05:14:52 -07:00
Jim
dc0d4bae7b Merge pull request #4444 from tako-black/Add_period
Add period
2015-07-21 05:14:28 -07:00
Kohei TAKATA
d8961311c5 Add period 2015-07-21 21:08:42 +09:00
Kohei TAKATA
75d0486202 Translate 10.4test-utils.md to Japanese 2015-07-21 21:04:46 +09:00
Jim
57d14ec33a Merge pull request #4400 from jimfb/adler32
Improved performance for our adler32 implementation.
2015-07-20 18:53:58 -07:00
Jim
57e9e5bf23 Improved performance for our adler32 implementation 2015-07-20 18:50:05 -07:00
Ben Alpert
16483e3cca Merge pull request #4427 from spicyj/gh-1232
Fix switching between dangerouslySetInnerHTML and children
2015-07-20 16:57:01 -07:00
Ben Alpert
caae627cd5 Fix switching between dangerouslySetInnerHTML and children
With this, ReactMultiChild handles all of the children-related operations for ReactDOMComponent so that we don't process operations out of order. This is necessary because ReactMultiChild does its own batching so there's no way without its cooperation to get the timing right here.

Ideally we'll factor this logic out a bit better in subsequent updates but this is the simplest way to fix #1232 which has embarrassingly been open for over a year.
2015-07-20 16:37:43 -07:00
Paul O’Shannessy
3ca5c15c1e Merge pull request #4092 from mking/remove-react-source-gem
Stop building react-source gem
2015-07-20 15:18:26 -07:00
Paul O’Shannessy
d66fd21446 Merge pull request #4435 from rtfeldman/fix-error-message
Fix typo in removeComponentAsRefFrom error message
2015-07-20 13:04:00 -07:00
Richard Feldman
c13588ef0a Fix typo in removeComponentAsRefFrom error message. 2015-07-20 11:16:15 -07:00
Ben Alpert
21fff2daa6 Merge pull request #4432 from spicyj/eslint-upg
Upgrade eslint
2015-07-20 08:45:29 -07:00
Ben Alpert
06304d59de Upgrade eslint
Fixes #4428.
2015-07-20 08:37:47 -07:00
Ben Alpert
d13fafa5dd counterexample -> antipattern 2015-07-20 08:28:53 -07:00
dongmeng.ldm
28329e8655 add animationIterationCount in isUnitlessNumber 2015-07-20 10:45:23 +08:00
Ben Alpert
33a5a64160 Merge pull request #4387 from spicyj/aep
Remove AnalyticsEventPlugin
2015-07-18 21:27:36 -07:00
Jason Bonta
bae4e586e5 Make component api docs clearer
I'm proposing these changes because I found some repetition / lack of
clarity and some language that suggested that you could mutate
`this.state` directly.
2015-07-18 17:20:36 -07:00
Jim
c73f95292c Merge pull request #4408 from jimfb/remove-children-map
Removed flattened children object.  Fixes #4405
2015-07-17 22:19:39 -07:00
Jim
fe99e59c81 Removed flattened children object for initial render. Fixes #4405 2015-07-17 22:01:59 -07:00
Paul O’Shannessy
2ea0bd77b4 Merge pull request #4419 from Simek/invert-if-else-with-negation
invert few if-else with negation for better readability
2015-07-17 16:39:15 -07:00
Bartosz Kaszubowski
da11691e26 invert few if-else with negation for readability 2015-07-18 00:19:28 +02:00
Jim
c844899187 Fixed basic-jsx example, which got clobbered during a prior bug investigation 2015-07-17 14:42:55 -07:00
Paul O’Shannessy
cc85f42f0f Merge pull request #4414 from zpao/lint-src-test
Enable linting in src/tests, cleanup
2015-07-17 13:56:32 -07:00
Paul O’Shannessy
a28325e412 Enable linting in src/tests, cleanup 2015-07-17 13:35:17 -07:00
Paul O’Shannessy
d435556920 Merge pull request #4412 from hawsome/patch-2
Switch to using comma-dangle: always-multiline
2015-07-17 13:34:33 -07:00
Paul O’Shannessy
c72f2e455a Merge pull request #4413 from zpao/more-default-value-docs-chagnes
Tweaks to new content in forms documentation
2015-07-17 13:32:47 -07:00
Paul O’Shannessy
8f419c956e Merge pull request #4393 from zpao/rm-browser-tests
Remove in-browser unit testing
2015-07-17 00:24:03 -07:00
Paul O’Shannessy
5da408297f Remove in-browser unit testing
Rely on jest for now until we get a better and less hacky solution to running tests in the browser, probably a totally different test suite with different behavior/goals.
2015-07-17 00:13:16 -07:00
Paul O’Shannessy
2b97bc63f0 Tweaks to new content in forms documentation 2015-07-16 23:50:18 -07:00
Chris Ha
c085c85045 Switch to using comma-dangle: always-multiline 2015-07-16 23:40:16 -07:00
Jim
976b51adf8 Merge pull request #4379 from eriklharper/patch-1
Add more information about defaultValue
2015-07-16 19:13:31 -07:00
Jim
aa5f503595 Merge pull request #4407 from Simek/patch-4
split code block for readability
2015-07-16 19:08:50 -07:00
Jim
b66fa7eb05 Merge pull request #4409 from tako-black/translate_class-name-manipulation_to_japanese
Translate 10.3-class-name-manipulation.md to Japanese
2015-07-16 19:06:08 -07:00
Paul O’Shannessy
ddb84f44a8 Merge pull request #3186 from benekastah/patch-1
Modify sample CSS so that it works in Safari
2015-07-16 16:52:21 -07:00
Kohei TAKATA
990caa4a9a Translate 10.3-class-name-manipulation.md to Japanese 2015-07-17 08:51:22 +09:00
Bartosz Kaszubowski
46d0bf825c split code block for readability 2015-07-16 23:49:40 +02:00
eriklharper
fabdeaa6b8 Review changes
Fixing spelling errors and revising based on feedback.
2015-07-16 10:57:16 -07:00
Ben Alpert
44ed6010d3 Merge pull request #4306 from brigand/patch-5
Blog: move "refs to custom components..." fixes #4305
2015-07-15 16:36:16 +02:00
Ben Alpert
6858c7120c Remove AnalyticsEventPlugin
We only ever had a couple internal users of this, and now we have none. Removing it from the repo for cleanliness.
2015-07-15 15:36:55 +02:00
Andreas Savvides
4a05be3459 [#4369] Make getting started a little less confusing 2015-07-15 11:25:58 +01:00
Jim
d6c062b213 Merge pull request #4382 from tako-black/enclose_a_name_of_library_in_back_quote
Enclose a name of library in back quote
2015-07-14 22:30:26 -07:00
Jim
d76a686c7f Merge pull request #4383 from tako-black/translate_form-input-binding-sugar_to_japanese
Translate 10.2-form-input-binding-sugar.md to Japanese
2015-07-14 22:29:49 -07:00
Paul O’Shannessy
ea6b0dd1b0 Merge pull request #4384 from zpao/jest-on-travis-again
Use more specific ignore pattern for jest
2015-07-14 18:35:27 -07:00
Paul O’Shannessy
91a87174bc Use more specific ignore pattern for jest
TravisCI clones into /home/travis/build/facebook/react, which /build/ matches so we never ran any of our tests.
2015-07-14 18:28:30 -07:00
Kohei TAKATA
9a95ce8308 Enclose a name of library in back quote 2015-07-15 09:26:56 +09:00
Kohei TAKATA
024f5fc595 Translate 10.2-form-input-binding-sugar.md to Japanese 2015-07-15 09:20:29 +09:00
eriklharper
95a810ac01 Add more information about defaultValue
I came across an issue on a React project where I needed to programatically set the default value of an input as the result of an async call.  (I was prepopulating a zip code field from the Google Maps Geocoding API).  It didn't work when I passed in an updated defaultValue prop, until I came across this StackOverflow: http://stackoverflow.com/questions/30146105/react-input-defaultvalue-doesnt-update-with-state.  I was able to get it to do what I wanted by passing in the value prop instead.
2015-07-14 13:28:55 -07:00
Jim
432d887f4a Merge pull request #4377 from sugarshin/typo_docs
Delete unnecessary control code.
2015-07-14 10:27:19 -07:00
sugarshin
75a0049433 Delete unnecessary control code. 2015-07-15 00:39:52 +09:00
Jim
704ea0bb83 Merge pull request #4371 from tako-black/translate_animation_to_japanese
Translate 10.1-animation.md to Japanese
2015-07-14 00:00:10 -07:00
Kohei TAKATA
fe466e5842 Translate 10.1-animation.md to Japanese 2015-07-14 15:54:42 +09:00
Paul O’Shannessy
64dafb17a9 Merge pull request #4237 from jas14/issue-4226
Allow wrap attribute in textarea
2015-07-13 16:58:43 -07:00
Joe Stein
1b5bfb516a Add wrap attribute 2015-07-13 15:00:03 -07:00
Bartosz Kaszubowski
ea2496b6f6 traverseAllChildren code clarity 2015-07-13 23:45:00 +02:00
Jim
9baaeec21d Don't skip reconcilation if context differs 2015-07-13 14:21:38 -07:00
Paul O’Shannessy
4d178415e8 Merge pull request #4144 from lukehorvat/docs/iife-jsx
Add IIFE example to JSX documentation
2015-07-13 14:01:51 -07:00
Paul O’Shannessy
e9b3974d7c Merge pull request #4291 from rwoodnz/patch-2
indicate file name requried for static file
2015-07-13 13:34:51 -07:00
Paul O’Shannessy
e9915f0735 Merge pull request #4357 from yangmillstheory/docfix
Warn against JSX transform failure for non-HTTP-served JSX
2015-07-13 13:20:09 -07:00
Victor Alvarez
36ee340fe5 Add warning for protocol sandboxing near pain point in Getting Started 2015-07-13 12:50:42 -07:00
Paul O’Shannessy
820c695612 Merge pull request #4355 from makky3939/use_html5_meta_charset_tag
Use html5 meta charset tag
2015-07-13 11:45:53 -07:00
Paul O’Shannessy
fa7aeb65ac Merge pull request #4363 from tako-black/change_css_to_uppercase
Change `css` to uppercase
2015-07-13 10:35:22 -07:00
Kohei TAKATA
4715dec510 Change css to uppecase 2015-07-13 21:07:40 +09:00
Jim
bd390afc22 Merge pull request #4362 from makky3939/translate_04_self_closing_tag
Translate 4-self-closing-tag.md to Japanese
2015-07-12 22:15:25 -07:00
Masaki KOBAYASHI
3098a6f66e Translate 04-self-closing-tag.md to Japanese 2015-07-13 12:38:24 +09:00
Jim
ea964e760c Merge pull request #4356 from makky3939/fix_03-interactivity-and-dynamic-uis_ja-JP_md
Update 03-interactivity-and-dynamic-uis.ja-JP.md
2015-07-11 21:39:25 -07:00
Jim
0572747d74 Merge pull request #4358 from makky3939/remove_controll_character_from_jp_docs
Remove controll character from jp.md
2015-07-11 21:38:13 -07:00
Masaki KOBAYASHI
ec98fa9e3d remove controll character from 07-forms.ja-JP.md, 10-addons.ja-JP.md and 10-addons.ja-JP.md 2015-07-12 11:39:05 +09:00
Masaki KOBAYASHI
ca34c57a5e fix typo 2015-07-12 11:17:41 +09:00
Masaki KOBAYASHI
dee6726080 change http-equiv with charset 2015-07-12 10:54:54 +09:00
Jim
3ee65cc653 Merge pull request #4349 from makky3939/remove_type_attribute_in_script_tag
Remove type attribute in script tag
2015-07-11 11:40:37 -07:00
Jim
2b3d83fe34 Merge pull request #4351 from tako-black/translate_addons_to_japanese
Translate 10-addons.md to Japanese
2015-07-11 11:36:57 -07:00
Jim
13c9bb4845 Merge pull request #4348 from himkt/master
remove controll character from 02-displaying-data.ja-JP.md
2015-07-11 11:36:33 -07:00
Kohei TAKATA
b35de1db4e Translate 10-addons.md to Japanese 2015-07-11 15:55:04 +09:00
Masaki KOBAYASHI
81e3b632fd remove type="text/javascript" 2015-07-11 15:02:54 +09:00
himkt
41858a77a3 remove controll character from 02-displaying-data.ja-JP.md 2015-07-11 15:00:25 +09:00
Jim
7661d6c7da Merge pull request #4346 from makky3939/fix_typo_09-tooling-integration_ja-JP_md
fix typo 09-tooling-integration.ja-JP.md
2015-07-10 21:56:02 -07:00
Masaki KOBAYASHI
445e99b7d9 fix typo 2015-07-11 13:50:42 +09:00
Jim
52ad6bc61a Merge pull request #4324 from drd/improve-warning-in-react-mount
Improve warning in react mount
2015-07-10 11:06:32 -07:00
Paul O’Shannessy
f0caf89dad Merge pull request #4342 from laiso/unexpected_character
Remove the unexpected character in ReactEventListener
2015-07-10 09:18:54 -07:00
laiso
804b109ba6 Remove the unexpected character in ReactEventListener 2015-07-11 01:00:21 +09:00
Paul O’Shannessy
441a6ec378 Merge pull request #4338 from dcousens/patch-1
s/currentPathElemenID/currentPathElementID
2015-07-09 23:56:50 -07:00
Paul O’Shannessy
4ec2575cd8 Merge pull request #4337 from tako-black/translate_tooling-integration_to_japanese
Translate 09.tooling-integration.md to Japanese
2015-07-09 23:53:01 -07:00
Daniel Cousens
dfe5f19917 s/currentPathElemenID/currentPathElementID 2015-07-10 16:38:39 +10:00
Cheng Lou
37cd9277a9 Merge pull request #4336 from zpao/ID-not-Id
ID not Id
2015-07-09 23:11:17 -07:00
Kohei TAKATA
e6832b5136 Translate 09.tooling-integration.md to Japanese 2015-07-10 15:09:26 +09:00
Paul O’Shannessy
7032e88c25 ID not Id 2015-07-09 22:49:26 -07:00
Jim
6c0ab0b60e Merge pull request #4334 from tako-black/add_meta_tag_in_the_header_of_html
Add meta tag in the header of HTML in translated documentation.
2015-07-09 19:59:51 -07:00
Kohei TAKATA
a9e0b4a0a3 Change number of html{} to highlight correct line 2015-07-10 09:16:26 +09:00
Kohei TAKATA
87ecb0ba1f Add meta tag in the header of HTML 2015-07-10 08:49:43 +09:00
Benjamin Woodruff
4d4e0bd699 Merge pull request #4330 from zpao/eslint-jest
Use jest for eslint-rules
2015-07-09 16:04:15 -07:00
Paul O’Shannessy
d967ea4658 Merge pull request #4332 from bgw/eslint-tests-use-jest
Run eslint tests with jest
2015-07-09 16:04:01 -07:00
Benjamin Woodruff
fc0b42dc07 Run eslint tests with jest
Turns out eslint-tester works with jest (!)

We take advantage of this internally at FB, so we'll do it here too.

Fixes #4328
2015-07-09 15:59:59 -07:00
Eric O'Connell
d2e8449bf0 Only perform expensive checks in __DEV__, clean up after inserted iframe 2015-07-09 15:49:49 -07:00
Paul O’Shannessy
44c98704ff Use jest for eslint-rules 2015-07-09 15:40:52 -07:00
Paul O’Shannessy
78f1369380 Merge pull request #4329 from zpao/fix-jest
Reset module cache between tests
2015-07-09 15:31:32 -07:00
Paul O’Shannessy
d6183570e3 Reset module cache between tests
This ensures that module caches for warnings is reset between runs. This makes
it so the deprecations warnings always fire.
2015-07-09 15:24:43 -07:00
Jim
cf164f1aa2 Merge pull request #4327 from jimfb/markup-unit-test
Add unit test: should generate simple markup for attribute with `>` symbol
2015-07-09 15:05:08 -07:00
Jim
7b1f03f4f8 Merge pull request #4311 from jimfb/fix-input-events
Fix event target for input change events.  Fixes #4288
2015-07-09 15:03:37 -07:00
Eric O'Connell
0941cc9884 Use a test case that demonstrates the fix. 2015-07-09 14:56:55 -07:00
Jim
b89f7ebff4 Add unit test: should generate simple markup for attribute with > symbol 2015-07-09 14:26:41 -07:00
Jim
75c4311a04 Merge pull request #4325 from jimfb/self-closing-checksum
Fix checksum hash attribute insertion for self-closing root tags.  Fixes #4323
2015-07-09 14:23:07 -07:00
Jim
dfeeb3f673 Fix checksum hash attribute insertion for self-closing root tags. Fixes #4323 2015-07-09 14:21:40 -07:00
Eric O'Connell
902b607f1f Fix some lint 2015-07-09 14:06:42 -07:00
Eric O'Connell
1316160b86 Properly handle rendering into document when comparing markup 2015-07-09 11:48:42 -07:00
Jim
a9e2111b34 Merge pull request #4320 from tako-black/translate_more-about-refs_to_japanese
Translate 08.1-more-about-refs.md to Japanese
2015-07-09 08:25:56 -07:00
Jim
34c8b2366c Merge pull request #4317 from koba04/add-deprecation-warning-for-clonewithprops
Add runtime deprecation warning for cloneWithProps
2015-07-09 08:24:20 -07:00
Toru Kobayashi
17a4dc83e0 Add runtime deprecation warning for cloneWithProps 2015-07-09 19:12:26 +09:00
Kohei TAKATA
55c3d92bc8 Translate 08.1-more-about-refs.md to Japanese 2015-07-09 18:41:19 +09:00
Paul O’Shannessy
59eddf8943 Merge pull request #4319 from tako-black/enclose_a_name_of_function_in_back_quote
Enclose a name of function in back quote
2015-07-08 23:13:59 -07:00
Kohei TAKATA
ecb483f307 Enclose a name of function in back quote 2015-07-09 15:11:20 +09:00
Eric O'Connell
0249adf3db Handle escaping when comparing server/client markup 2015-07-08 20:31:10 -07:00
Paul O’Shannessy
84efb8a4f3 Merge pull request #4318 from jlongster/master
respect NODE_ENV environment variable if set when building
2015-07-08 15:14:59 -07:00
Jim
418e03e96e Merge pull request #4309 from mmoss/addons-warning-fix
Concatenate warning message, due to parsing issues
2015-07-08 12:17:35 -07:00
James Long
ce61a49bca respect NODE_ENV environment variable if set when building 2015-07-08 14:45:21 -04:00
Murray M. Moss
334372758c Add comment to explain string concatenation 2015-07-08 13:26:36 -04:00
Murray M. Moss
fa4063455b Concatenate warning message, due to parsing issues
The addons module warning is currently causing issues with babel/JSPM due to the warning message getting parsed as a require statement. Adding a break using string concatenation appears to prevent any issues.

Example error using JSPM:

```
Error loading "react-addons-{addon}" from...
```
2015-07-08 13:24:01 -04:00
Paul O’Shannessy
6eaf03df1a Merge pull request #4314 from devonharvey/patch-1
Fix typo on line 91 of tutorial.md
2015-07-08 09:30:49 -07:00
Devon Harvey
b3ae6891b7 Fix typo on line 91 of tutorial.md 2015-07-07 22:16:14 -07:00
Jim
c3f0d7c6bd Merge pull request #4312 from tako-black/translate_working-with-the-browser_to_japanese
Translate 08-working-with-the-browser.md to Japanese
2015-07-07 20:09:13 -07:00
Kohei TAKATA
5d7f24c67f Translate 08-working-with-the-browser.md to Japanese 2015-07-08 09:21:09 +09:00
Jim
4b804e485d Fix event target for input change events. Fixes #4288 2015-07-07 17:14:52 -07:00
Jim
ed0d41bb88 Merge pull request #4310 from tako-black/enclose_a_value_of_variable_in_back_quote
Enclose a value of variable in back quote
2015-07-07 16:27:30 -07:00
Kohei TAKATA
4dbb8b307c Enclose a value of variable in back quote 2015-07-08 08:24:42 +09:00
Richard Wood
24c41b6849 Add backticks to highlight comment.json file name 2015-07-08 10:16:21 +12:00
Jim
abf965c3c5 Merge pull request #4290 from rwoodnz/patch-1
Suggest open index.html in browser regularly.
2015-07-07 15:08:27 -07:00
Frankie Bagnardi
335f7d5e57 Blog: move "refs to custom components..." fixes #4305
Just to prevent the TL;DR confusion. Separate paragraph and moved up above the code block. `s/References/Refs` for consistency.
2015-07-06 19:28:23 -07:00
Kevin Coughlin
e685da53ee Clarify React.render note in documentation 2015-07-06 21:47:37 -04:00
Jim
2284c0f449 Merge pull request #4299 from tako-black/enclose_a_value_in_back_quote
Enclose a value of variable in back quote
2015-07-06 08:20:47 -07:00
Jim
25be80c959 Merge pull request #4300 from tako-black/translate_forms_to_japanese
Translate 07-forms.md to Japanese
2015-07-06 08:20:03 -07:00
Kohei TAKATA
b66a520d13 Translate 07-forms.md to Japanese 2015-07-06 19:17:52 +09:00
Kohei TAKATA
f0a7b5df64 Enclose a value of variable in back quote 2015-07-06 17:57:44 +09:00
Jim
500d4c3f87 Merge pull request #4209 from aruberto/iterable_node_proptype
Allow iterables to pass node prop type check
2015-07-05 17:19:37 -07:00
Jim
a8955e7c3e Merge pull request #4292 from dariocravero/patch-1
Update 2015-07-03-react-v0.14-beta-1.md
2015-07-05 17:01:24 -07:00
Jim
19e1918ccd Merge pull request #4287 from Simek/semicolon-cleanup
semicolon cleanup
2015-07-05 15:55:09 -07:00
Darío Javier Cravero
8f9800193c Update 2015-07-03-react-v0.14-beta-1.md
Highlight all packages names so that they're easier to read /cc @spicyj
2015-07-05 14:39:24 +01:00
Richard Wood
50ea437bf8 indicate file name requried for static file
the text doesn't say explicitly to call your file comments.json, nor to put it in the public directory.
2015-07-05 23:38:23 +12:00
Richard Wood
a9d0135f84 Suggest open index.html in browser regularly. 2015-07-05 23:05:53 +12:00
Paul O’Shannessy
a4034b37eb Merge pull request #4283 from Yeti-or/patch-1
Remove unnecessary semicolon;
2015-07-05 16:02:50 +07:00
Paul O’Shannessy
3b54d5cd57 Merge pull request #4284 from Simek/patch-3
add IntelliJ IDEA project related ignores
2015-07-05 15:59:57 +07:00
Paul O’Shannessy
5370987cc0 Merge pull request #4289 from joshuago/patch-1
Fix typos
2015-07-05 15:56:11 +07:00
Joshua Go
1c831b186c Fix typos
Just s/Javascript/Javascript/g and punctuation changes.
2015-07-05 00:15:08 -07:00
Bartosz Kaszubowski
7a2be27d63 semicolon cleanup
One unnecessary semicolon removed and few missing added.
2015-07-05 01:06:04 +02:00
Bartosz Kaszubowski
3ac6dfa5f7 add IntelliJ IDEA project related ignores 2015-07-04 21:27:33 +02:00
Vasiliy
01535bfc18 Remove unnecessary semicolon;
For the God of css
2015-07-04 21:43:12 +03:00
Ben Alpert
cb5913a842 Fix react-addons-update package name 2015-07-04 17:26:24 +02:00
Ben Alpert
d0d57ad7a3 Merge pull request #4278 from koba04/fix-addons-update-package
Fix a library path for react-addons-updates
2015-07-04 17:22:58 +02:00
Toru Kobayashi
ddf27b6299 Rename react-addons-updates to react-addons-update 2015-07-04 16:53:16 +09:00
Jim
5a7019de7b Merge pull request #3798 from levibuzolic/attribute-inputmode
Add inputMode to allowed HTML DOM properties
2015-07-03 17:23:13 -07:00
Levi Buzolic
3b2df5fd9c Add inputMode to HTML DOM Property Whitelist 2015-07-04 02:17:22 +02:00
Ben Alpert
10f8e22e20 Add missing semicolon 2015-07-03 10:53:00 +02:00
Ben Alpert
b2db10f43e beta1 blog post
Closes #4275.
2015-07-03 10:46:36 +02:00
Ben Alpert
b4e74e38e4 Bump version to beta1 2015-07-03 10:46:35 +02:00
Ben Alpert
41aa3496aa Add setProps/replaceProps warning 2015-07-03 10:46:35 +02:00
Ben Alpert
2b68ea21ee Removed most uses of setProps in unit tests
Picked from 721fe73541.
2015-07-03 10:46:35 +02:00
Ben Alpert
4eb889b72e Revert "Removed setProps and replaceProps (both previously deprecated)"
This reverts commit 721fe73541. We'll keep these with a warning for one more release.
2015-07-03 10:46:35 +02:00
Jim
2d86486fd1 Merge pull request #4276 from tako-black/translate_transferring-props_to_japanese
Translate 06-transferring-props.md to Japanese
2015-07-02 20:34:59 -07:00
Kohei TAKATA
680d4e7933 Translate 06-transferring-props.md to Japanese 2015-07-03 09:49:17 +09:00
Ben Alpert
ee85efc03c Merge pull request #4273 from spicyj/addons
Finish addons packaging
2015-07-02 23:39:04 +02:00
Ben Alpert
33d5201a94 Finish addons packaging
- Add missing object-assign dependency
- Add batchedUpdates to ReactDOMClient, rename the two addons to `unstable_`
- Delete react/addons/* (leaving react/addons with a slightly updated warning)
- Add README.md, LICENSE, PATENTS to each addons package
2015-07-02 23:33:16 +02:00
Ben Alpert
a88c3c9f85 Merge commit 'pr/4185'
Closes #4185.
2015-07-02 23:05:15 +02:00
Ben Alpert
0eaa0a6ff7 Fix jest tests 2015-07-02 22:54:22 +02:00
Ben Alpert
07107ca936 Merge pull request #4184 from zpao/move-from-addons
Move renderSubtreeIntoContainer into ReactDOMClient
2015-07-02 22:53:47 +02:00
Jim
ddffc7cebe Merge pull request #4270 from kamronbatman/patch-1
Fixed header comment spacing in ReactComponentWithPureRenderMixin.
2015-07-02 10:31:48 -07:00
Kamron Batman
72b432df03 Fixed header comment spacing.
Fixed header comment spacing in the header for ReactComponentWithPureRenderMixin.
2015-07-02 09:36:52 -07:00
Jim
2baf4bf4e8 Merge pull request #4268 from jimfb/remove-setprops
Removed setProps and replaceProps (both previously deprecated)
2015-07-02 04:47:18 -07:00
Jim
6a92179d6f Merge pull request #4221 from jimfb/ryans-context-bug
updateComponent should update the context iff it has changed
2015-07-02 04:45:41 -07:00
Jim
851378b0b2 Merge pull request #4150 from jimfb/event-path
Make events propagate through shadow DOMs.
2015-07-02 04:35:44 -07:00
Jim
4a465fbd9a Make events propagate through shadow DOMs. 2015-07-02 04:32:22 -07:00
Jim
721fe73541 Removed setProps and replaceProps (both previously deprecated) 2015-07-02 04:00:58 -07:00
Paul O’Shannessy
d268a9fbe3 Merge pull request #4238 from bhamodi/bhamodi/update-dependency-notation
More conservative dependency update.
2015-07-02 10:27:26 +07:00
Jim
8953033454 Merge pull request #4259 from janraasch/patch-1
Add IE-only security attr to HTMLDOMPropertyConfig
2015-07-01 18:15:39 -07:00
Jim
feee7a1868 Merge pull request #4231 from DarkScorpion/clickCounter
Click counter example
2015-07-01 17:46:43 -07:00
Jim
bde585f4e0 Merge pull request #4262 from coryhouse/patch-1
Removed redundant word
2015-07-01 17:37:53 -07:00
Jim
c3e411a0dc Merge pull request #4266 from tako-black/translate_reusable-components_to_japanese
Translate 05-reusable-components.md to Japanese
2015-07-01 17:04:29 -07:00
Kohei TAKATA
f5e0d0c8f2 Translate 05-reusable-components.md to Japanese 2015-07-02 08:44:42 +09:00
Jan Raasch
b089b427ab Add IE-only security attr to HTMLDOMPropertyConfig
See https://msdn.microsoft.com/en-us/library/ms534622(v=vs.85).aspx for an in-depth specification.

This fixes #4169.
2015-07-01 19:47:48 +02:00
Cory House
e869c58a1d Removed redundant word 2015-07-01 11:26:31 -05:00
Sebastian Markbåge
8f9643485d Merge pull request #4162 from sebmarkbage/updator
Inject the update queue into classes
2015-07-01 17:46:05 +02:00
Ben Alpert
9f0042cd8d Merge pull request #4258 from mjomble/patch-1
Typo fix
2015-06-30 15:57:37 +02:00
Andres Kalle
af2071af63 Typo fix 2015-06-30 15:05:57 +03:00
Alex Smith
83c8118c7c update title 2015-06-30 19:43:44 +09:00
Alex Smith
6b669aa37d used JSX 2015-06-30 17:49:25 +09:00
Alex Smith
099c227c35 lowercase index file 2015-06-30 17:26:50 +09:00
Jim
ae9b2c0649 Merge pull request #4252 from bhamodi/patch-2
Update url to save a redirect
2015-06-29 10:28:29 -07:00
Baraa Hamodi
91de455909 Update React Link
Saves a redirect from occurring.
2015-06-29 10:21:35 -07:00
Ben Alpert
454d47fa09 Merge pull request #4223 from spicyj/check-no-warn
Fail tests on any un-spied warnings
2015-06-29 07:57:56 -07:00
Ben Alpert
c22153e25a Fail tests on any un-spied warnings
Fixes #3890.
2015-06-29 07:57:35 -07:00
Jim
d9d442808a Merge pull request #4249 from tako-black/translate_multiple-components_to_japanese
Translate 04-multiple-components.md to Japanese
2015-06-29 05:15:33 -07:00
Kohei TAKATA
d32f8b5a38 Translate 04-multiple-components.md to Japanese 2015-06-29 21:11:39 +09:00
Paul O’Shannessy
859a5d5c3c Merge pull request #4229 from tako-black/translate_jsx-spread_to_japanese
Translate 02.2-jsx-spread.md to Japanese
2015-06-28 23:59:34 -07:00
Paul O’Shannessy
dd3244c4f2 Merge pull request #4242 from tako-black/translate_interactivity-and-dynamic-uis_to_japanese
Translate 03-interactivity-and-dynamic-uis.md to Japanese
2015-06-28 23:57:20 -07:00
Kohei TAKATA
308db9a866 Translate 03-interactivity-and-dynamic-uis.md to Japanese 2015-06-28 19:31:47 +09:00
Matthew King
fc63cebd29 Stop building react-source gem
fixes #4069
2015-06-27 13:44:08 -07:00
Jim
e695ebb5c6 Merge pull request #4240 from tako-black/translate_jsx-gotchas_to_japanese
Translate 02.3-jsx-gotchas.md to Japanese
2015-06-27 09:20:09 -07:00
Kohei TAKATA
19e1d11d2f Translate 02.3-jsx-gotchas.md to Japanese 2015-06-27 19:11:40 +09:00
Ben Alpert
6bbd6976eb Merge pull request #4239 from tako-black/change_word_to_uppercase
Change 'Javascript' to 'JavaScript'
2015-06-27 03:01:49 -07:00
Kohei TAKATA
aefb608fd6 Change 'Javascript' to 'JavaScript' 2015-06-27 18:49:41 +09:00
Alex Smith
67c70b8690 R: handleClick function 2015-06-27 12:13:29 +09:00
Baraa Hamodi
c1ec407bd9 More conservative dependency update. 2015-06-26 18:37:15 -07:00
Jim
5fb8cbc6ca Merge pull request #4232 from marocchino/update-docs
Update translated docs
2015-06-26 10:22:01 -07:00
Shim Won
ca6fa4b7e6 Add site title to first code snippet of getting started (bd9d4b2) 2015-06-26 19:39:44 +09:00
Shim Won
c1b0550acf Update script source (c227a39) 2015-06-26 19:39:25 +09:00
Alex Smith
2b554703af add new line at and of some files 2015-06-26 13:50:43 +09:00
Alex Smith
e58d31022c update click message 2015-06-26 13:39:59 +09:00
Alex Smith
456135eb04 rename folder 2015-06-26 13:35:30 +09:00
Alex Smith
d19aa7a363 use react from bild 2015-06-26 13:34:20 +09:00
Alex Smith
e766d5539e click conter example 2015-06-26 13:08:32 +09:00
Alex Smith
578077081f update git ignore 2015-06-26 12:55:25 +09:00
Kohei TAKATA
829ce68cd7 Translate 02.2-jsx-spread.md to Japanese 2015-06-26 09:55:04 +09:00
Jim
289962f6f8 Don't bail out of reconsiliation if context changes. 2015-06-25 00:58:05 -07:00
Ben Alpert
ef00e856aa Merge pull request #4204 from dpercy/patch-1
Fix docs typo: "overridden" -> "overwritten"
2015-06-24 23:18:23 -07:00
Jim
9bcc8dab93 Merge pull request #4222 from tako-black/translate_jsx-in-depth_to_japanese
Translate 02.1-jsx-in-depth.ja-JP.md to Japanese
2015-06-24 22:48:58 -07:00
Kohei TAKATA
f460a19d8a Translate 02.1-jsx-in-depth.ja-JP.md to Japanese 2015-06-25 14:46:19 +09:00
li.li
63d0471580 Remove warnings in tests
For #3890.

Squashed merge, closes #3925.
2015-06-24 22:01:36 -07:00
Ben Alpert
0b0a436a41 Drop react-codemod.tgz from travis build
This didn't work anyway. See #4217.
2015-06-24 18:41:34 -07:00
Ben Alpert
d87f50aab8 Merge pull request #4217 from brigand/patch-5
Fix travis after_script
2015-06-24 18:38:38 -07:00
Frankie Bagnardi
0677fe8f3b Fix travis artifact upload
Changes:
 - moves after_script to script
 - adds `set -e`
 - creates a seperate matrix 'build'

Way at the bottom of the travis output:

```
1571: curl: (26) couldn't open file "build/react.tgz"
```

This seems to be broken since 12c9fee94e
2015-06-24 18:09:34 -07:00
Ben Alpert
8f217c8a4b Merge pull request #4215 from spicyj/prod-props
Set this.props on elements in prod mode
2015-06-24 16:38:14 -07:00
Ben Alpert
9ba28f317b Merge pull request #4200 from spicyj/ten-thousand
Allow deeper trees
2015-06-24 16:33:30 -07:00
Ben Alpert
9c8c11dd07 Set this.props on elements in prod mode
Oops. Introduced in https://github.com/facebook/react/pull/4172.
2015-06-24 16:26:40 -07:00
Antonio Ruberto
79fc73e674 check entry type iterables
check that the value is a node for map iterables
2015-06-24 15:17:48 -04:00
Jim
4431c90fa4 Merge pull request #4208 from battaile/master
Minor cleanup of ReactES6Class-test output by expecting the warning
2015-06-24 08:18:44 -07:00
Jim
484e20c02d Merge pull request #4206 from yiminghe/fix_change_type
Set change event type in SyntheticEvent
2015-06-24 08:05:52 -07:00
Jim
b99fb2c92d Merge pull request #4202 from tako-black/translate_displaying-data_to_japanese
Translate 02-displaying-data.md to Japanese
2015-06-24 07:42:48 -07:00
Antonio Ruberto
8e72956430 Allow iterables to pass node prop type check 2015-06-24 09:43:02 -04:00
Battaile Fauber
41df3ce421 Check for warning when testing to see if error is thrown when render not defined 2015-06-24 08:03:36 -04:00
Ben Alpert
e80cccf87f Merge pull request #4207 from yangshun/patch-1
Add site title to first code snippet of getting started
2015-06-24 02:24:04 -07:00
yiminghe
ee831d7550 optimize spec 2015-06-24 17:13:41 +08:00
Tay Yang Shun
bd9d4b2499 Add site title to first code snippet of getting started 2015-06-24 17:09:34 +08:00
yiminghe
47e9cfb975 fix change event type 2015-06-24 17:06:35 +08:00
David Percy
78018b99d6 Fix docs typo: "overridden" -> "overwritten"
I think this was meant to say "overwritten", since "the statement overwrites the data" makes more sense than "the statement overrides the data".
2015-06-24 01:54:54 -04:00
Kohei TAKATA
af34ca7b41 Translate 02-displaying-data.md to Japanese 2015-06-24 09:23:05 +09:00
Jim
3dc43840ef Merge pull request #4188 from jisaacks/master
Generate reasonable markup even if tags have unexpected case.
2015-06-23 15:04:36 -07:00
JD Isaacks
d944d3f941 Prevent creating invalid closing tags
fixes #2756
2015-06-23 17:58:52 -04:00
Ben Alpert
fdaefc1103 Allow deeper trees
No reason to limit at 100. I can't imagine a reasonable tree with depth over 10,000 but that should still be small enough to "catch infinite loops" quickly.
2015-06-23 14:07:05 -07:00
Ben Alpert
c5fb3ff987 Merge pull request #4139 from spicyj/dom-refs
DOM components as refs
2015-06-22 16:58:01 -07:00
Ben Alpert
06b88c38f9 Merge pull request #4084 from spicyj/carc
Remove constructAndRenderComponent
2015-06-22 16:57:52 -07:00
Ben Alpert
d810079101 Remove constructAndRenderComponent
These were never part of the public API and shouldn't have been part of the React object. Now they're not.
2015-06-22 16:55:19 -07:00
Ben Alpert
eefda9377c Add legacy methods to DOM components for compatibility 2015-06-22 16:51:21 -07:00
Ben Alpert
ffd527f593 DOM components as refs
Still missing: .props/.getDOMNode warnings.
2015-06-22 16:51:21 -07:00
Ben Alpert
643651b8e5 Wrap all top-level components for consistency 2015-06-22 16:51:04 -07:00
Sebastian Markbåge
9d2c9b5864 Merge pull request #4196 from oluckyman/componentDidUnmount-warning
Show warning when componentDidUnmount is defined
2015-06-22 16:48:27 -07:00
oluckyman
2568933ca3 Update warn message and move it to the error-catching block 2015-06-22 23:52:37 +02:00
Jim
859b7957b7 Merge pull request #4190 from dantman/fix-%s-module
Don't try building a %s module.
2015-06-22 14:45:19 -07:00
Ben Alpert
7e0a544ae3 Merge pull request #4164 from spicyj/jest-wc
Fix exceptions when running `grunt test --debug`
2015-06-22 14:22:41 -07:00
oluckyman
db40beafbe Show warning when componentDidUnmount is defined
Fixes #4194
2015-06-22 21:09:33 +02:00
Daniel Friesen
357ed8ebd7 Add a comment about why the string is split up. For future readers of this file. 2015-06-22 12:04:29 -07:00
Daniel Friesen
c8d606196d Don't try building a %s module.
React's build tools are reading the `require("react")` and `react("%s")` inside the warning string and thinking they are actual requires.
2015-06-21 21:14:04 -07:00
Paul O’Shannessy
79561342c3 Build standalone react-addons packages 2015-06-21 20:01:21 +08:00
Paul O’Shannessy
bbadc15ac1 Move renderSubtreeIntoContainer into ReactDOMClient 2015-06-20 18:08:33 -07:00
Ben Alpert
df05c6efb8 Fix typo in blog post
(#4183)
2015-06-20 16:49:33 -07:00
Ben Alpert
64b5f043dd Merge pull request #4170 from johanneslumpe/patch-1
Guard against a null node
2015-06-20 16:42:23 -07:00
Jim
ede27d2e86 Merge pull request #4172 from jimfb/freeze-props
Freeze ReactElement.props in dev mode
2015-06-19 14:13:17 -07:00
Johannes Lumpe
b16f9d42b1 Guard against a null node
This could fix #2619
2015-06-19 11:21:22 +03:00
Sebastian Markbåge
59dfe87d04 Merge pull request #4171 from sebmarkbage/simplifylifecycle
Simplified Life Cycles
2015-06-18 23:16:27 -07:00
Sebastian Markbage
c1330dcfcd Unit tests for unmounted setState and isMounted 2015-06-18 22:55:52 -07:00
Jim
95373ce769 Freeze ReactElement.props in dev mode 2015-06-18 14:49:06 -07:00
Sebastian Markbage
8659223939 Lint fixes 2015-06-18 14:12:21 -07:00
Sebastian Markbage
dddebd1344 Use hack to support isMounted without stateful module
This hack allow us to get rid of the stateful module ReactLifeCycle since
we can infer the value of isMounted even without it. This gets rid of
the try/catch which is deopting all mountComponent calls.

As a next step we could deprecate isMounted completely and avoid stateful
APIs. Since it can be easily simulated if you truly need it.
2015-06-18 14:10:12 -07:00
Sebastian Markbage
140af9b985 Allow callbacks to be enqueued during componentWillMount
Since I fixed the server-side rendering it is now possible to trigger these
callbacks on the client alone. They will still be queued up on the server
but they are never executed.
2015-06-18 13:35:39 -07:00
Sebastian Markbage
e737acb472 Let updates be enqueued during render
This allows updates to be enqueued during render. setState in
componentWillMount will still be collected as part of the first pass so
if nothing else get added as pending, they won't trigger a second rerender.

This allow us to get rid of one more stateful special case.
2015-06-18 13:35:39 -07:00
Sebastian Markbage
40b7c19a89 Use a custom batching strategy for server rendering
This simply ignores any enqueued actions. This means that we don't have to have special logic for componentWillMount. It is just that those updates are never enqueued.
2015-06-18 13:34:30 -07:00
Sebastian Markbage
3af73834d9 Remove currentlyUnmountingComponent
This was used for any invariant that was subsequently removed. It turns
out that this is completely unnecessary now. Any setState calls will
enqueue and update and the component added to the update queue. However,
since the pending fields are reset after componentWillUnmount, any update
will still be ignored.
2015-06-18 12:36:50 -07:00
Sebastian Markbage
7443f63ae9 Remove an unnecessary warning
It was impossible to get here because if you enqueue something

Also ensure that they're only used in DEV because we will be reading
state that is DEV only here.
2015-06-18 12:36:45 -07:00
Sebastian Markbage
c4cafcecd9 Move current owner to isomorphic
This should only be used for tracking string refs. For that purpose, we
need a single central stateful module that is coupled to createElement.
Which is why it needs to live in isomorphic.

Eventually this will go away completely.
2015-06-18 09:05:35 -07:00
Ben Alpert
d76e3e1632 Fix exceptions when running grunt test --debug 2015-06-17 20:57:04 -07:00
Sebastian Markbage
1224a203bb Inject the update queue into classes
This decouples the stateful imperative API from the class creation.
Instead, they get injected into the class from the renderer. Stateful
modules should always be injected.

As a convenience, just like props/context/refs, we set it up after
construction using mutation. That way it is optional to pass it along
the super call constructor chain.
2015-06-17 18:57:26 -07:00
Ben Alpert
016021207c Merge pull request #4154 from spicyj/gh-3478
Improve error message when mounting non-string/function elements
2015-06-17 16:26:02 -07:00
Paul O’Shannessy
a841b4f5fb Merge pull request #2981 from hzoo/jsdoc-fixes 2015-06-17 16:06:37 -07:00
Paul O’Shannessy
531e6280a3 Merge pull request #4158 from zpao/mv-packages
Move npm packages into folder
2015-06-17 12:18:37 -07:00
Ben Alpert
642323e5a8 Improve error message when mounting non-string/function elements 2015-06-17 12:04:05 -07:00
Paul O’Shannessy
12c9fee94e Move npm packages into folder 2015-06-17 12:01:44 -07:00
Paul O’Shannessy
ec791582f4 Merge pull request #4156 from tako-black/fix_link
Fix link of getting-started.ja-JP.md
2015-06-17 11:53:21 -07:00
Paul O’Shannessy
10ada3b5f5 Merge pull request #4157 from zpao/svg-image
Support SVG image, other related cleanup
2015-06-17 11:44:29 -07:00
Paul O’Shannessy
ace49f304b Merge pull request #4100 from zpao/deprecate-react-calls
Deprecate non-isomorphic react methods in npm module
2015-06-17 11:15:46 -07:00
Paul O’Shannessy
bdbbe40b1e Merge pull request #4140 from zpao/mv-errorutils
Move ReactErrorUtils out of vendor
2015-06-17 10:51:02 -07:00
Paul O’Shannessy
efdd75685d Support SVG image 2015-06-17 10:47:53 -07:00
Paul O’Shannessy
572a1d895c Update getMarkupWrap with list of SVG supported in ReactDOM 2015-06-17 10:40:11 -07:00
Paul O’Shannessy
265fdc3eed Rewrite SVG initialization in getMarkupWrap 2015-06-17 10:37:13 -07:00
Kohei TAKATA
3c53d25587 Fix link of getting-started.ja-JP.md 2015-06-17 22:17:47 +09:00
Ben Alpert
c265504fe2 Merge pull request #4152 from spicyj/rce
Disallow passing a DOM component to reactComponentExpect
2015-06-16 23:33:09 -07:00
Ben Alpert
306c2dd5a9 Merge pull request #4151 from spicyj/fairti
Disallow passing a DOM component to findAllInRenderedTree
2015-06-16 23:32:53 -07:00
Ben Alpert
cf6b3ff0e2 Disallow passing a DOM component to reactComponentExpect
We won't be able to support this after DOM-components-as-refs but we don't expect many people to be passing DOM components to this function anyway, and it should be fairly straightforward for people to clean up failing unit tests using this function.

(This module also isn't public API and never has been.)
2015-06-16 17:51:06 -07:00
Ben Alpert
4070c4ca20 Disallow passing a DOM component to findAllInRenderedTree
We won't be able to support this after DOM-components-as-refs but we don't expect many people to be passing DOM components to this function anyway, and it should be fairly straightforward for people to clean up failing unit tests using this function.
2015-06-16 16:37:37 -07:00
Ben Alpert
c9b0c26966 Invert logic in findAllInRenderedTreeInternal
With DOM components we won't be able to go from public instance to internal instance reliably, so do the traversal on internal instances.
2015-06-16 14:38:03 -07:00
Paul O’Shannessy
e571b32061 Wrap calls to deprecated functions with a warning. 2015-06-16 13:23:40 -07:00
Paul O’Shannessy
f306ed65b3 Merge pull request #4121 from cristovaov/tutorial-doc/script-src
update script sources to be even with the example file ...
2015-06-16 12:37:20 -07:00
Paul O’Shannessy
6248abb6ee Merge pull request #4142 from zpao/lint-changed
npm script to run lint only on changed files
2015-06-16 11:41:28 -07:00
Paul O’Shannessy
ddac9473ca npm script to run lint only on changed files 2015-06-16 11:24:02 -07:00
Ben Alpert
efcf2e318e Merge pull request #4145 from RReverser/patch-1
Update 2015-06-12-deprecating-jstransform-and-react-tools.md
2015-06-16 10:57:50 -07:00
Sebastian Markbåge
2d29691019 Merge pull request #4105 from sebmarkbage/moveismounted
Move isMounted logic into the ReactUpdateQueue
2015-06-16 10:36:04 -07:00
Ingvar Stepanyan
cab21c7783 Update 2015-06-12-deprecating-jstransform-and-react-tools.md
Add paragraph about parsing JSX after deprecation of esprima-fb.
2015-06-16 16:18:18 +03:00
Luke Horvat
9a2e5f2cc5 Add IIFE example to JSX documentation 2015-06-16 19:46:25 +10:00
Paul O’Shannessy
93be1939b5 Move ReactErrorUtils out of vendor
Some other small changes now that it's linted.
2015-06-16 01:16:17 -07:00
Ben Alpert
78da37da50 Merge pull request #4137 from spicyj/setpropsinternal
Remove _setPropsInternal
2015-06-15 23:33:14 -07:00
Ben Alpert
ee367a8a02 Remove _setPropsInternal
Nothing uses this.
2015-06-15 23:28:27 -07:00
Ben Alpert
d67f23fb0e Merge pull request #4115 from spicyj/dom-hash
Reduce hash lookups for DOM properties
2015-06-15 14:15:55 -07:00
alexpien
f1e524b0b1 Add support for appear and appear-active classes 2015-06-15 12:05:18 -07:00
Paul O’Shannessy
a2862f3c2f Merge pull request #4097 from zpao/react-dom-package
Build react-dom package
2015-06-15 12:04:44 -07:00
Paul O’Shannessy
3bae8f5f35 Build react-dom package 2015-06-15 11:01:39 -07:00
Paul O’Shannessy
193773e349 Merge pull request #4103 from marocchino/ko-update
Update Korean transltaion to 4c778e2
2015-06-15 10:56:40 -07:00
Paul O’Shannessy
f8ffb0f8b3 Merge pull request #4132 from tako-black/translate_why-react_to_japanese
Translate 01-why-react.md to Japanese
2015-06-15 10:51:32 -07:00
Kohei TAKATA
1d3906f91d Translate 01-why-react.md to Japanese 2015-06-15 21:30:12 +09:00
Cristovao Verstraeten
c227a398ba update script sources to be even with the example file in reactjs/react-tutorial repo ... apply to japanese and korean translation (+2 squashed commit)
Squashed commit:

[4564e55] Ensures we don't need to update this page for every release.

[b0d60f9] update script sources to be even with the example file in reactjs/react-tutorial repo
2015-06-15 13:30:15 +02:00
Paul O’Shannessy
cfe428e510 Merge pull request #4128 from prathamesh-sonpatki/more-typos
Fix typos in ReactServerRenderingTransaction.js
2015-06-15 00:32:53 -07:00
Prathamesh Sonpatki
7b0764b1d2 Fix typos in ReactServerRenderingTransaction.js
- There were some more occurrences of typos fixed in
   https://github.com/facebook/react/pull/4123.
2015-06-15 12:42:45 +05:30
Paul O’Shannessy
80cc63ffce Merge pull request #4123 from carterchung/patch-1
Corrected spelling in ReactReconcileTransaction.js
2015-06-15 00:03:47 -07:00
Carter Chung
c01352232b Corrected spelling
ReactReconcileTransaction.js
2015-06-13 18:21:17 -07:00
Ben Alpert
da40027dfd Merge pull request #4119 from iamdustan/patch-1
s/parse/parser in jstransform deprecation blog post
2015-06-12 21:52:13 -07:00
Ben Alpert
434a64a08a Merge pull request #4114 from spicyj/void-warn
Add owner to void element children warning
2015-06-12 21:41:24 -07:00
Ben Alpert
99b89ff1b3 Add owner to void element children warning 2015-06-12 21:37:51 -07:00
Dustan Kasten
54e77a251c s/parse/parser in jstransform deprecation blog post 2015-06-12 23:57:49 -04:00
Ben Alpert
40963e503b Reduce hash lookups for DOM properties 2015-06-12 17:10:26 -07:00
Paul O’Shannessy
26cc5e1c43 [blog] Deprecate JSTransform & react-tools 2015-06-12 16:45:15 -07:00
Paul O’Shannessy
830bc92d36 Merge pull request #4112 from kevhuang/doc/readme-grammar
Remove extra period
2015-06-12 12:10:12 -07:00
Kevin Huang
7e27772625 Remove extra period 2015-06-12 11:29:26 -07:00
Sebastian Markbåge
a1cf88b098 Merge pull request #4091 from sebmarkbage/updatequeuewarning
Make setState in render a warning, not an invariant
2015-06-11 18:41:46 -07:00
Sebastian Markbage
ffd5b16d5f Move isMounted logic into the ReactUpdateQueue
This is kind of a confusing place for it but it is intimitely tied to the
update life cycle which is what the update queue is about.

This kills some dependencies from isomorphic to the renderer.
2015-06-11 18:39:13 -07:00
Shim Won
e67c0943b8 Update Korean transltaion to 4c778e2 2015-06-12 10:24:07 +09:00
Benjamin Woodruff
e4abdcb31b Merge pull request #4102 from tomarak/patch-1
Fixed grammar in CLA section of contribution guide
2015-06-11 17:57:32 -07:00
Anuj Tomar
61ef4a24cb Fixed grammar in CLA section of contribution guide
took out quotation marks from CLA header as per MLA standards
2015-06-11 17:49:46 -07:00
Ben Alpert
4c778e2e4b Merge pull request #4098 from spicyj/grunt
Inline requires in Gruntfile
2015-06-11 15:14:09 -07:00
Ben Alpert
67a98468b2 Inline requires in Gruntfile
I think this makes it quite a bit easier to understand.
2015-06-11 15:00:30 -07:00
Paul O’Shannessy
128390a691 Merge pull request #4095 from zpao/update-jest
Update jest to latest
2015-06-11 11:07:20 -07:00
Paul O’Shannessy
b4b542303d Update jest to latest 2015-06-11 11:01:00 -07:00
Paul O’Shannessy
e98acaa4a7 Merge pull request #4058 from yiminghe/className_contains
fix className check in scryRenderedDOMComponentsWithClass when encounter new line
2015-06-11 09:37:09 -07:00
Paul O’Shannessy
9a93f24709 [lint] Ignore generated docs 2015-06-11 09:27:05 -07:00
yiminghe
a5f3962ef6 update code style 2015-06-11 23:26:09 +08:00
yiminghe
69339a0f67 update code style 2015-06-11 23:21:52 +08:00
Sebastian Markbage
02aafb5162 Make setState in render a warning, not an invariant
We keep track of the fact that something is rendering for a bunch of
warnings. (ReactCurrentOwner.current !== null)

Once we get rid of owner for string refs, I'll convert those to something
like "isRendering" instead. The interesting part is that feature `__DEV__`
only. It is only used for warnings. Except for this case.

This means that we can get rid of the special case for the isRendering
stack on in prod.
2015-06-10 18:33:59 -07:00
Sebastian Markbåge
8b24b3d8b0 Merge pull request #4090 from sebmarkbage/fixdomcomponentest
Use the public render API in ReactDOMComponent-test
2015-06-10 17:57:33 -07:00
Sebastian Markbage
3cdf718504 Use the public render API in ReactDOMComponent-test
Avoids testing a non-public API. First step towards refactoring more of
these internals to not be instances. Also gets rid of an _owner usage.
2015-06-10 17:34:56 -07:00
Paul O’Shannessy
f55b93672f Merge pull request #4088 from zpao/fix-class-test
Fix Class tests
2015-06-10 17:19:40 -07:00
Paul O’Shannessy
d580a71293 Fix Class tests
These were introduced in #4045 as a result of jest not running properly in CI.

I also fixed the places where we misspelled "misspelling".
2015-06-10 17:06:04 -07:00
Ben Alpert
6c96f9f273 Merge pull request #4086 from spicyj/ta
Remove stray call to ReactDOMTextarea.unmountWrapper
2015-06-10 15:49:04 -07:00
Ben Alpert
f073ce2ba7 Remove stray call to ReactDOMTextarea.unmountWrapper
ReactDOMInput has this but ReactDOMTextarea doesn't so we shouldn't try to call it.
2015-06-10 15:31:27 -07:00
Jim
88042b1b00 Merge pull request #4074 from jimfb/docs-context-parameter-confusing
Fixed confusing use of the word/name `context` in documentation
2015-06-10 13:32:03 -07:00
Ben Alpert
4f73ce2c95 Merge pull request #4077 from neojski/svg-namespace
Add xmlns to svg wrap
2015-06-10 12:19:45 -07:00
Jim
537a84183a Merge pull request #3752 from jhicken/Custom-Element-Support
Ignore whitelisted attributes for native custom elements.
2015-06-10 10:58:54 -07:00
Ben Alpert
46cec1949d Merge pull request #4071 from spicyj/warn-dom-props
Fix IE8
2015-06-10 10:16:57 -07:00
Jeff Hicken
7256f0976c Ignore whitelisted attributes for native custom elements that use the is attribute. 2015-06-10 10:00:21 -06:00
Tomasz Kołodziejski
c9fab582c4 Add xmlns to svg wrap
Closes #4072.
2015-06-10 15:57:05 +02:00
Jim
5446ef1c14 Fixed confusing use of the word/name in documentation 2015-06-10 02:48:48 -07:00
Ben Alpert
13a8758fc8 Fix IE8 2015-06-09 18:45:29 -07:00
Ben Alpert
0abb350530 Merge pull request #4070 from tako-black/fix_md_file
Fix code of getting-started-ja-JP
2015-06-09 17:01:14 -07:00
Kohei TAKATA
005b65c17b Fix code of getting-started-ja-JP 2015-06-10 08:52:47 +09:00
yiminghe
e704503dc7 optimize className check 2015-06-10 01:11:39 +08:00
Scott Feeney
61d8de3f3f Merge pull request #4003 from AnSavvides/on-change-vs-on-input
[#3964] Add note about React's onChange vs. DOM's oninput
2015-06-09 11:13:28 -04:00
Paul O’Shannessy
04a025f3b7 Merge pull request #4046 from basarat/patch-2
📝 document changes for classes
2015-06-08 21:46:39 -07:00
Paul O’Shannessy
3faad4f65f Merge pull request #4063 from zpao/fix-ja-docs
fix japanese docs permalinks
2015-06-08 20:16:49 -07:00
Basarat Ali Syed
b7fe1ac0fc 📝 link to docs and not the blog post 2015-06-09 11:33:33 +10:00
Paul O’Shannessy
8488cb4dac fix japanese docs permalinks 2015-06-08 18:18:57 -07:00
Paul O’Shannessy
2b53acb00a Merge pull request #4045 from davemeetsworld/add-warning-for-mispelling-of-componentWillReceiveProps
Added warning for mispelling of componentWillReceiveProps and updated…
2015-06-08 15:12:40 -07:00
David Baker
2d8c4be000 Added warning for mispelling of componentWillReceiveProps and updated tests 2015-06-08 22:44:30 +01:00
Paul O’Shannessy
5955379753 Merge pull request #4060 from cody/addons
Fix addon name in npm Readme
2015-06-08 14:00:20 -07:00
Paul O’Shannessy
a74138bdee Fix docblock of ReactFragment 2015-06-08 13:49:29 -07:00
Stefan Dombrowski
c9ab11f5ff Fix addon name in npm Readme 2015-06-08 22:39:12 +02:00
Ben Alpert
6b8ed9b64e Merge pull request #3884 from glenjamin/patch-3
Document boolean attributes in JSX
2015-06-08 13:28:39 -07:00
Paul O’Shannessy
7f7528c454 Merge pull request #4059 from jquense/patch-3
fix my embarrassing amount of typos in this 4 line change
2015-06-08 13:01:15 -07:00
Benjamin Woodruff
f27d130323 Merge pull request #4040 from PiPeep/eslint-updates
Update eslint-related dependencies
2015-06-08 13:00:13 -07:00
Jason Quense
813649cbc7 fix my embarrassing amount of typos in this 4 line change 2015-06-08 15:59:30 -04:00
Paul O’Shannessy
09993a1379 Merge pull request #4054 from jquense/patch-2
Update npm Readme to new method of accessing addons
2015-06-08 12:53:28 -07:00
Ben Alpert
8614dd3cf9 Merge pull request #3984 from neojski/uppercase-node-name
Always toLowerCase when comparing nodeName or tagName
2015-06-08 11:44:56 -07:00
Ben Alpert
0e3ae67418 Merge pull request #4043 from spicyj/80
Remove line length lint warning
2015-06-08 10:40:42 -07:00
Ben Alpert
39f232b9aa Merge pull request #4042 from spicyj/warn-dom-props
Warn when accessing .props, .setProps on DOM components
2015-06-08 10:40:26 -07:00
Ben Alpert
bfcad9614a Warn when accessing .props, .setProps on DOM components 2015-06-08 10:36:20 -07:00
Benjamin Woodruff
52eca1eb69 Update eslint-related dependencies
- babel-eslint ^3.1.14 fixes babel/babel-eslint#120
- babel updated from ^5.3.3 to ^3.5.5, which changes stuff, I guess
- eslint updated from ^0.21.2 to ^0.22.1, which makes `no-shadow` also
  check class declarations
2015-06-08 08:41:13 -07:00
Jason Quense
7fa8c79d40 Update docs to new method of accessing addons 2015-06-07 19:07:36 -04:00
Andreas Savvides
ae83e90ec7 [#3964] Add note about React's onChange vs. DOM's oninput 2015-06-07 10:39:08 +01:00
Tomasz Kołodziejski
2bb69328ae Always toLowerCase when comparing nodeName or tagName
In xml node name casing is exactly the same as the node was originally named.
Make sure to convert node and tag names to lower case before making any node
and tag name checks.

Fixes #3960.
2015-06-06 10:28:43 +02:00
Basarat Ali Syed
b994d076d1 📝 document changes for classes
Taking https://github.com/facebook/react/pull/4013#discussion_r31829922 into account
2015-06-06 10:23:41 +10:00
Ben Alpert
ba81b60ad8 Merge pull request #4037 from spicyj/ref-trans
Only enqueue attachRefs if refs are present
2015-06-05 12:42:09 -07:00
Ben Alpert
edee1c7ed7 Merge pull request #4035 from spicyj/dc-os
Convert select/option to not use wrappers
2015-06-05 12:41:34 -07:00
Benjamin Woodruff
0dab63b905 Merge pull request #4034 from PiPeep/eslint-rules-as-a-plugin
Load custom eslint rules as plugin, w/o --rulesdir
2015-06-05 10:43:02 -07:00
Ben Alpert
c6837507f9 Only enqueue attachRefs if refs are present
for #4036
2015-06-04 22:57:46 -07:00
Ben Alpert
06de43d73e Remove line length lint warning
...because the current situation isn't helpful; no one looks at the list. Our style guide hasn't changed.
2015-06-04 18:14:31 -07:00
Ben Alpert
abfd151b90 Convert select/option to not use wrappers 2015-06-04 18:13:54 -07:00
Ben Alpert
806ff23f03 Merge pull request #4033 from spicyj/dc-events
Convert form, iframe, img to not use wrappers
2015-06-04 17:23:48 -07:00
Benjamin Woodruff
30cce21ae6 Load custom eslint rules as plugin, w/o --rulesdir
This allows us to load the eslint rules without requiring command-line
arguments, which avoids breaking editors with eslint plugins.

https://github.com/eslint/eslint/issues/2180#issuecomment-87722150
2015-06-04 17:04:45 -07:00
Benjamin Woodruff
58302a71c4 Merge pull request #4032 from PiPeep/babel-eslint-no-unused-vars
Roll back to babel-eslint 3.1.9
2015-06-04 15:53:04 -07:00
Ben Alpert
a825380840 Convert form, iframe, img to not use wrappers
Test Plan:
Tested manually that rendering an `<img />` triggers its onLoad handler.
2015-06-04 15:52:34 -07:00
Benjamin Woodruff
40eb94d13e Roll back to babel-eslint 3.1.9
spicyj noticed newer versions of babel-eslint seemed not to error on
no-unused-vars, and I was able to repro. It seems like something broke
between 3.1.9 and 3.1.10. (Smaller repro case and babel-eslint bug
report to come)

His commit failed on travis, but not on his local machine:
https://travis-ci.org/facebook/react/jobs/65468729
2015-06-04 15:43:41 -07:00
Benjamin Woodruff
1f307ae118 Merge pull request #4029 from PiPeep/warning-invariant-rules-take-two
Fix problems with/improve warning and invariant rules (take two)
2015-06-04 15:10:13 -07:00
Benjamin Woodruff
2fa1b2c810 Attempt to simplify/fix warnAndMonitorForKeyUse
> The two callers of this function have different warning configs
> internally (static_upstream/core/createWarning.js) so we can't sync it
> like this without changing behavior. We should just split this out
> into two separate warning calls probably – this code is a little
> overabstracted.

https://github.com/facebook/react/pull/4021#discussion_r31690020
@spicyj

I think completely removing warnAndMonitorForKeyUse is a bit difficult, without
duplicating a ton of code. This at least ensures that the format string passed
to `warning` is unique. Plus, because the FB internal code in question only
matches the beginning of the format string, I think there should be zero
internal changes that need to be made to support this refactor.
2015-06-04 15:07:17 -07:00
Paul O’Shannessy
da27129f73 Merge pull request #3913 from edvinerikson/edvinerikson/better-warning-message
Added component displayName to warning message in ReactUpdateQueue.js
2015-06-04 15:00:36 -07:00
Ben Alpert
aacd7ac57d Merge pull request #4030 from spicyj/dc-button
Convert ReactDOMButton
2015-06-04 14:47:58 -07:00
Benjamin Woodruff
c91fd8ac14 Check warning/invariant calls have good messages
The `warning` implementation checked that the message is long enough to
be useful. See commit f5038829d for more information.

It makes more sense to move this into a lint rule, and also to apply it
for both `warning` and `invariant`. We can safely remove stuff from the
`warning` implementation as we replace the function internally anyways.

https://github.com/facebook/react/pull/4021#issuecomment-108694976
@spicyj
2015-06-04 14:19:22 -07:00
Ben Alpert
9dbc29e276 Convert ReactDOMButton 2015-06-04 13:59:32 -07:00
Sebastian Markbåge
2d9a0846f1 Merge pull request #3940 from troutowicz/context_processing
Process childContextTypes via internal constructor
2015-06-04 13:54:14 -07:00
Ben Alpert
d993475e9e Merge pull request #4027 from spicyj/dc-textarea
Convert ReactDOMTextarea to not be a wrapper
2015-06-04 13:53:43 -07:00
Ben Alpert
67a4f0e852 Merge pull request #4028 from spicyj/npm-run-lint
Fix `npm run lint`
2015-06-04 13:37:00 -07:00
Ben Alpert
d2e7e56cc4 Convert ReactDOMTextarea to not be a wrapper 2015-06-04 13:36:46 -07:00
Paul O’Shannessy
2b195cb1ca Merge pull request #3941 from troutowicz/testing_type
Assert instance type using internal constructor
2015-06-04 13:31:23 -07:00
Ben Alpert
b1538e36e3 Fix npm run lint
Broke in #4021.
2015-06-04 13:20:42 -07:00
Paul O’Shannessy
d3db430baf Merge pull request #4022 from zpao/fix-undefined-location
Use correct location when running LinkedValueUtils proptype checks
2015-06-04 13:02:54 -07:00
Edvin Erikson
fa9382654a reversed line 54 (no-op message) in ReactUpdateQueue.js and added it to the line above 2015-06-04 21:47:35 +02:00
Edvin Erikson
58edaab705 Added component displayName to warning message in ReactUpdateQueue.js 2015-06-04 21:47:34 +02:00
Ben Alpert
e04015a4a2 Merge pull request #4011 from spicyj/cfpc
Inline createFullPageComponent in ReactDOMComponent
2015-06-04 12:44:02 -07:00
Benjamin Woodruff
aecc48d877 Fix wording of warning-and-invariant-args linter
The wording for an incorrect number of arguments based on counting %s
substitutions. The previous wording was backwards and a bit yoda-like
leading to possible ambiguity.
2015-06-04 10:51:15 -07:00
Benjamin Woodruff
9760e13f36 Merge pull request #4007 from PiPeep/eslint-plugin-react
Enable more eslint-plugin-react rules
2015-06-04 09:51:47 -07:00
Benjamin Woodruff
c04a9e632c Enable react/wrap-multilines eslint rule
Multiline jsx literals in a return should be paren-wrapped.
2015-06-04 09:44:47 -07:00
Benjamin Woodruff
f41abdf70f Enable more eslint-plugin-react rules
This should contain all the rules we probably want to use, except
react/wrap-multilines, which requires a larger codemod, and would
clutter this commit.
2015-06-04 09:43:16 -07:00
Paul O’Shannessy
6b79977c31 Merge pull request #3416 from koba04/remove-jshint
Remove the codes relating to jshint
2015-06-03 19:45:51 -07:00
Benjamin Woodruff
56771b6701 Merge pull request #4021 from PiPeep/warning-invariant-rules
Add custom eslint rule for warning and invariant
2015-06-03 19:03:41 -07:00
Toru Kobayashi
ce46068def Remove the codes relating to jshint 2015-06-04 09:32:37 +09:00
Benjamin Woodruff
17e7046754 Add custom eslint rule for warning and invariant
See #2869

Checks that the *second* argument of warning and invariant are a literal
string, or a concatination of literal strings, and that the number of
arguments is correct based on the number of %s substrings.

This commit also fixes a few places where the existing code had broken
error messages!

The rule itself is pretty straightforward, although adding the tests
ended up being a bit painful, as eslint-tester depends on mocha, and
therefore needs to be run in a separate grunt task.
2015-06-03 17:19:32 -07:00
Paul O’Shannessy
ec289c27f9 Use correct location when running LinkedValueUtils proptype checks 2015-06-03 16:45:58 -07:00
Jim
9a02ea246d Merge pull request #3067 from jimfb/arbitrary-attributes-for-dash-elements
Support arbitrary attributes on elements with dashes in the tag name.
2015-06-03 12:52:54 -07:00
Ben Alpert
fc341c5537 Inline createFullPageComponent in ReactDOMComponent 2015-06-02 17:24:06 -07:00
Benjamin Woodruff
4c3e9650ba Merge pull request #3998 from PiPeep/comma-dangle
Switch to using comma-dangle: always-multiline
2015-06-02 17:02:39 -07:00
Benjamin Woodruff
95edacc994 Remove /*eslint-disable comma-dangle*/ comments
Commit 9d3f7f30ba3ba55cbfd98b26fdd2cc7289716650 reverses the rule, so
these comments aren't needed anymore.
2015-06-02 16:57:43 -07:00
Benjamin Woodruff
c089eece50 Switch to using comma-dangle: always-multiline
This is a machine-generated codemod, but it's pretty safe since it was
generated by hooking into eslint's own report.

A few files had to be touched up by hand because there were existing
formatting issues with nested arrays/objects:

src/shared/utils/__tests__/OrderedMap-test.js
src/shared/utils/__tests__/Transaction-test.js
src/shared/utils/__tests__/traverseAllChildren-test.js
src/isomorphic/children/__tests__/ReactChildren-test.js
2015-06-02 16:57:26 -07:00
Jim
e0e8270c9d Merge pull request #4009 from jimfb/kill-.type
Kill .type (was deprecated in 0.13, to be removed in 0.14)
2015-06-02 14:03:26 -07:00
Jim
c9153e6462 Kill .type (was deprecated in 0.13, to be removed in 0.14) 2015-06-02 13:36:51 -07:00
Jim
b1db817dc5 Support arbitrary attributes on elements with dashes in the tag name. 2015-06-02 11:57:29 -07:00
Paul O’Shannessy
0e37fde307 Merge pull request #4006 from cody/console
Remove debug message
2015-06-02 11:31:01 -07:00
Stefan Dombrowski
3e0de40d3a Remove debug message 2015-06-02 19:31:26 +02:00
Ben Alpert
1af9b54561 Merge pull request #3930 from Wildhoney/add-is-attribute
Added 'is' attribute for custom elements
2015-06-02 02:47:33 -07:00
Wildhoney
0d060d135f Added 'is' attribute 2015-06-02 10:42:31 +01:00
Ben Alpert
8c2a4991eb Merge pull request #3976 from spicyj/no-wrapper
Make DOM wrapper component using lower-level primitives
2015-06-01 20:20:20 -07:00
Ben Alpert
52a229f168 Make DOM wrapper component using lower-level primitives
Introducing: a really lame version of composite components, right inside of ReactDOMComponent!

Now ReactDOMInput isn't an actual component. This brings us closer to exposing DOM nodes as refs.
2015-06-01 20:16:01 -07:00
Jim
db82ed09c5 Merge pull request #3999 from jimfb/more-context-cleanup
Removed ReactContext (cleanup)
2015-06-01 17:08:23 -07:00
Jim
5ebcd9d89b Removed ReactContext (cleanup) 2015-06-01 16:46:45 -07:00
Paul O’Shannessy
1a2a54b947 Merge pull request #3988 from jrobison153/troubleshooting_docs
Troubleshooting documentation
2015-06-01 16:33:33 -07:00
Benjamin Woodruff
13823ec218 Merge pull request #3985 from PiPeep/eslint-tests
Enable linting for __tests__
2015-06-01 16:05:42 -07:00
Benjamin Woodruff
21ca3f732f Enable linting for __tests__
Closes #3971.

> After #3968, the next thing we should do is start linting our tests.
> Historically we've ignored them due to lack of parser compatibility.
> But that shouldn't be a problem anymore. We may want to integrate
> https://www.npmjs.com/package/eslint-plugin-react to more aggressively
> lint our JSX in tests.

I understand this diff touches a lot of stuff, so I tried to keep it to
a near-minimal set of changes to make eslint happy.
2015-06-01 16:01:03 -07:00
Paul O’Shannessy
659fda1f1c Merge pull request #3997 from donabrams/patch-1
Trivial misspelling in enqueueForceUpdate docs
2015-06-01 12:36:49 -07:00
Don Abrams
8074136bcb Trivial mispelling in docs 2015-06-01 13:28:20 -06:00
Ben Alpert
f661d7c407 Merge pull request #3993 from arianf/doctype
added missing DOCTYPE
2015-05-31 19:58:15 -07:00
Arian Faurtosh
f8f92f4169 added missing DOCTYPE 2015-05-31 19:41:01 -07:00
Ben Alpert
2fbe15e370 Merge pull request #3992 from thorn0/patch-1
Remove envify from the basic-commonjs example
2015-05-31 15:31:34 -07:00
thorn0
58492362c5 Remove envify from the basic-commonjs example
`envify` is installed as a dependency of the `react` package. There is no need in installing it one more time
2015-06-01 01:09:46 +03:00
jrobison
361f73a43e Addition of troubleshooting section 2015-05-30 05:20:29 -04:00
Paul O’Shannessy
38acadf6f4 Merge pull request #3975 from marocchino/update-korean
Update Korean transltaion to 58fb322
2015-05-29 14:25:35 -07:00
Paul O’Shannessy
fa56c52563 Merge pull request #3980 from cody/http
Revert links to non-https fiddles back to http in old blog posts
2015-05-29 14:23:19 -07:00
Stefan Dombrowski
cd54876518 Revert links to non-https fiddles back to http in old blog posts 2015-05-29 09:45:48 +02:00
Ben Alpert
54e3f12877 Merge pull request #3977 from spicyj/jest-lines
Retain lines in babel under jest
2015-05-28 16:10:28 -07:00
Ben Alpert
049fd9a902 Retain lines in babel under jest
Now stack trace lines are actually useful.
2015-05-28 16:09:25 -07:00
Shim Won
6a4617a4cd Update Korean transltaion to 58fb322 2015-05-29 07:53:21 +09:00
Benjamin Woodruff
58fb322e21 Use babel-eslint and update eslint
-   Removes esprima-fb dependency
-   Tightens up eslintrc with some minor rules we were pretty-much
    following anyways.
-   Adds pretty colors to the `grunt lint` output
-   Breaks block-scoped-var :(
2015-05-28 09:42:55 -07:00
Paul O’Shannessy
1df466b23a Merge pull request #3967 from jamischarles/master
Added challenge, keyParams and keyType on <keygen>
2015-05-28 09:32:10 -07:00
Jim
74915803a8 Merge pull request #3970 from jimfb/remove-_context
Removed ReactElement._context (cleanup)
2015-05-27 17:09:53 -07:00
Ben Alpert
8471cc5f47 0.14.0-alpha3 2015-05-27 16:47:35 -07:00
Jim
4e129220a6 Removed ReactElement._context (cleanup) 2015-05-27 16:37:11 -07:00
Ben Alpert
34f8a0d6da Merge pull request #3969 from spicyj/pt
Fix PropTypes.{oneOf, oneOfType} validation
2015-05-27 16:07:48 -07:00
Ben Alpert
ac349cfbe5 Fix PropTypes.{oneOf, oneOfType} validation
Follow-up to #3963. (Returning an Error wasn't useful; it just caused a later error when actually using it because type checkers need to be functions.)
2015-05-27 15:58:16 -07:00
Jamis Charles
dc01c0e66d Added challenge, keyParams and keyType on <keygen>
Chrome allowed some of these to be 'null' (allow `node.challenge` etc),
but FF didn't work. This will tell React to use node.setAttribute() to
set these values.

Tested in FF, Chrome, Safari. <keygen> isn't supported on IE.

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/keygen
2015-05-27 11:56:23 -07:00
Ben Alpert
f44bf7e67a Merge pull request #3966 from spicyj/no-worker-test
Remove web worker test
2015-05-27 10:53:53 -07:00
Ben Alpert
12ea09a03c Remove web worker test 2015-05-27 10:52:32 -07:00
Paul O’Shannessy
1503994821 Merge pull request #3963 from alansouzati/REACT_PROP_ARRAY_VALIDATION
Adding validation for array in ReactPropTypes.
2015-05-26 16:42:49 -07:00
Alan Souza
5d55bbc1b7 Adding validation for array in ReactPropTypes. 2015-05-26 15:54:31 -07:00
Paul O’Shannessy
3e1349bb65 Merge pull request #3950 from cody/capture
Add capture to supported attributes
2015-05-26 11:34:35 -07:00
Stefan Dombrowski
3092454940 Add capture to supported attributes 2015-05-24 21:20:40 +02:00
Jim
e1dd3cd8a1 Merge pull request #3923 from jimfb/fix-grunt-test-debug
Fixed failing unit tests in browsers that don't support WebComponents
2015-05-22 13:48:03 -07:00
Jim
7108c8a624 Fixed failing unit tests in browsers that don't support WebComponents 2015-05-22 13:27:52 -07:00
Tim Routowicz
f1e32a06e0 Assert instance type using internal constructor 2015-05-22 16:13:06 -04:00
Tim Routowicz
d7843fe4d2 Process childContextTypes via internal constructor 2015-05-22 16:07:51 -04:00
Christopher Chedeau
b249799bc7 Merge pull request #3938 from vjeux/blog_rn_release_process
[Blog post] React Native Release Process
2015-05-22 12:37:55 -07:00
Christopher Chedeau
516b623121 [Blog post] React Native Release Process 2015-05-22 12:34:43 -07:00
Ben Alpert
e1a9e429d3 Merge pull request #3934 from spicyj/gh-3921
Dedupe warnings in validateDOMNesting
2015-05-22 10:33:36 -07:00
Paul O’Shannessy
a78be9856a Merge pull request #3935 from julen/docs/transition-group
Docs: value for `transitionAppear` must be boolean
2015-05-22 10:21:58 -07:00
Julen Ruiz Aizpuru
c041356178 Docs: value for transitionAppear must be boolean 2015-05-22 15:22:22 +02:00
Ben Alpert
08b55e1c4f Dedupe warnings in validateDOMNesting
Fixes #3921.
2015-05-22 01:14:40 -07:00
Ben Alpert
e772c465e4 Merge pull request #3909 from spicyj/tir-redirect
Redirect Thinking in React blog post to docs
2015-05-21 22:09:48 -07:00
Ben Alpert
1d5e8c2387 Redirect Thinking in React blog post to docs
Much easier to keep this updated if it only exists in one place. Added the byline because otherwise the voice of the post doesn't sound quite right.
2015-05-21 22:09:21 -07:00
Paul O’Shannessy
a30c87525f Merge pull request #3788 from zpao/better-invariantwarning-replacement
Better invariant / warning replacement
2015-05-21 19:42:22 -07:00
Paul O’Shannessy
02f1626725 Better invariant / warning replacement 2015-05-21 19:20:56 -07:00
Ben Alpert
4aa7bffff5 Merge pull request #3931 from marocchino/update-korean
Update Korean transltaion to 5bee4a5
2015-05-21 18:33:09 -07:00
Shim Won
401caf2f96 Update Korean transltaion to 5bee4a5 2015-05-22 09:03:54 +09:00
Paul O’Shannessy
5bee4a5e29 Merge pull request #3803 from zpao/docs-fancy-authors
[docs] Give authors links.
2015-05-21 11:34:31 -07:00
Paul O’Shannessy
81950edeb1 [docs] Give authors links. 2015-05-21 11:32:38 -07:00
Paul O’Shannessy
924328b436 Update website with 0.13.3 builds
(cherry picked from commit 107ce2b80d)
2015-05-21 10:53:33 -07:00
Paul O’Shannessy
7425685c27 v0.13.3 blog post
(cherry picked from commit 179b6380cf)
2015-05-21 10:51:51 -07:00
Paul O’Shannessy
44a6cdf2bf Changelog for 0.13.3
(cherry picked from commit 95e864fd07)
2015-05-21 10:51:45 -07:00
Paul O’Shannessy
314ee6d635 Readme for 0.13.3
(cherry picked from commit 1d950ddbd4)
2015-05-21 10:51:39 -07:00
Paul O’Shannessy
631f3a4f59 Fix docs for #3690
(cherry picked from commit 2668de126c)
2015-05-21 10:51:21 -07:00
Paul O’Shannessy
f1cfd29e7e Merge pull request #3912 from laskos/shallow-context-pass
Add shallow context pass test
2015-05-20 15:11:31 -07:00
Sławomir Laskowski
2c83627ca8 Add shallow context pass test 2015-05-21 00:08:31 +02:00
Ben Alpert
e5f935636d Merge pull request #3917 from spicyj/option-context
Pass context to DOM wrappers, use it in <option>
2015-05-20 15:02:53 -07:00
Paul O’Shannessy
b687a22953 0.14.0-alpha2 2015-05-20 13:37:42 -07:00
Ben Alpert
2fafe3eb76 Pass context to DOM wrappers, use it in <option> 2015-05-20 12:30:51 -07:00
Paul O’Shannessy
a6485e11e7 Merge pull request #3896 from zpao/babel-ignore-web-components
Ignore third_party JS in internal transform step
2015-05-20 11:08:43 -07:00
Paul O’Shannessy
021574e07d [docs] Fix 404 due to relative url
Closes #3914
2015-05-20 10:15:35 -07:00
Ben Alpert
1d7da35153 Merge pull request #3910 from spicyj/gh-3904
Clarify tutorial instructions
2015-05-19 20:36:12 -07:00
Ben Alpert
c157ce3599 Clarify tutorial instructions
Fixes #3904.
2015-05-19 19:27:01 -07:00
Ben Alpert
34e2427f72 Merge pull request #3908 from spicyj/lint
Remove unused variable
2015-05-19 18:39:05 -07:00
Ben Alpert
a43b6fec45 Remove unused variable 2015-05-19 16:23:10 -07:00
Paul O’Shannessy
4cf39ef195 Merge pull request #3905 from troeggla/replace-getdomnode
Replaced call to deprected .getDOMNode() with React.findDOMNode().
2015-05-19 10:59:26 -07:00
Thomas Röggla
210dc90c95 Replaced call to deprected .getDOMNode() with React.findDOMNode().
The code sample in tip 18 in the docs contained a call to the
.getDOMNode() method which has been deprecated. The method call was
replaced with a call to React.findDOMNode(), which is the preferred way
of getting DOM nodes from a ref.
2015-05-19 18:32:07 +02:00
Ben Alpert
e47fa115bb Merge pull request #3883 from spicyj/revert-nested
Revert "Add key warning to nested collections"
2015-05-18 23:11:29 -07:00
Ben Alpert
69e6ab5083 Add test for DOM node as this.props.children 2015-05-18 23:11:07 -07:00
Ben Alpert
39402fe75d Revert "Add key warning to nested collections"
This heuristic isn't great because it relies on inspecting deep children which aren't guaranteed to be React elements. In particular, this was causing stack overflows in a component we had that used a *DOM node* as children, like `<DOMContainer>{node}</DOMContainer>`.

This reverts commits:
0a3aa8493a
64c9d9d762
0c58f4f6b1
8cf226e442
086636747f
2015-05-18 23:11:07 -07:00
Paul O’Shannessy
6502da8f8d Merge pull request #3894 from bhamodi/patch-2
Update Styling Guide in Contributing Docs
2015-05-18 10:53:09 -07:00
Paul O’Shannessy
9308a8abe6 Merge pull request #3892 from spicyj/docs-wwb
[docs] Clarify wording in Working with the Browser
2015-05-18 10:47:37 -07:00
Paul O’Shannessy
5b5e48a0d2 Ignore third_party JS in internal transform step 2015-05-18 09:50:13 -07:00
Baraa Hamodi
00342dfc26 Update Styling Guide in Contributing Docs 2015-05-17 23:38:40 -07:00
Ben Alpert
c7381ea48d [docs] Clarify wording in Working with the Browser
I think the change in #3889 misinterpreted this slightly; this makes it clearer.
2015-05-17 11:58:17 -07:00
Paul O’Shannessy
490d8835fc Merge pull request #3737 from Morhaus/nested-proptypes-warnings
Better warnings for nested propTypes
2015-05-16 12:09:29 -07:00
Paul O’Shannessy
095d4691ca Merge pull request #3888 from marocchino/korean-update
Update Korean Translation to 5275244
2015-05-16 12:03:42 -07:00
Paul O’Shannessy
97d338fd5b Merge pull request #3889 from garethnic/WorkBrowser
change wording in 'Working with the Browser'
2015-05-16 11:09:49 -07:00
Gareth Nicholson
07bfadf054 change wording 2015-05-16 15:55:29 +02:00
Shim Won
6f434b35ad Update Korean Translation to 5275244 2015-05-16 21:49:04 +09:00
Glen Mailer
0950f50753 Document boolean attributes in JSX 2015-05-16 12:00:14 +01:00
Sebastian Markbåge
5275244676 Merge pull request #3866 from sebmarkbage/coreapi
Reorganize Src Directory for Isomorphic React Package
2015-05-15 18:39:36 -07:00
Sebastian Markbage
0b063f8a09 Reorganize Src Files for Isomorphic React Package
The new folder structure is organized around major packages that are expected to ship separately in some form.

`/isomorphic`

I moved classic/modern and children utils into a directory called "isomorphic" with the main export being ReactIsomorphic. This will eventually become the "react" package.

This includes all the dependencies that you might need to create a component without dependencies on the renderer/reconciler.

The rest moves into decoupled renderers.

`/renderers/dom/client` - This is the main renderer for DOM.

`/renderers/dom/server` - This is the server-side renderer for HTML strings.

`/addons` and `/test` - Same as before for now.

You're not supposed to take on a dependency inside another package.

Shared code is organized into a "shared" directory which is intended to support all the packages in that subdirectory. Meaning that once we swap to CommonJS modules, the only time you should use `..` is to target `../shared/` or `../../shared`.

E.g. `/shared/` is common utils that are used by everything.

`/renderers/shared/` is code that is shared by all renderers, such as the main reconciliation algorithm.

Shared code will likely be copied into each package rather than referenced. This allow us to have separate state and allow inlining and deadcode elimination.
2015-05-15 18:35:22 -07:00
Paul O’Shannessy
bea5a57750 Merge pull request #3746 from chrisgrovers/patch-1
Fixed Formatting.
2015-05-15 18:09:44 -07:00
Paul O’Shannessy
c464e873fd Merge pull request #3874 from bhamodi/patch-1
Update CONTRIBUTING.md
2015-05-15 18:08:00 -07:00
Paul O’Shannessy
3ef24f73bb Merge pull request #3881 from ef718/docs-grammar
Fix punctuation and grammar
2015-05-15 17:57:36 -07:00
Paul O’Shannessy
cfa354415b Followup to #3852, use https 2015-05-15 17:51:57 -07:00
Ben Alpert
35e67a793e Merge pull request #3882 from wali-s/get-html5-minlength-working
Get HTML5 minlength working.
2015-05-15 15:51:14 -07:00
wali-s
aeb45360ed Get HTML5 minlength working.
Adding minLength=X to an input element would not work, whereas maxLength=X would work.

This change gets minLength=X working.
2015-05-15 15:47:15 -07:00
Ben Alpert
7112a35037 Merge pull request #3847 from bloodyowl/option-flatten-children
<option> added children flatten, & warn if invalid
2015-05-14 10:36:27 -07:00
Ben Alpert
69fc206f96 Merge pull request #3719 from spicyj/vdn2
Add more context to DOM nesting warning
2015-05-14 10:33:21 -07:00
Ben Alpert
5c7b4a043f Merge pull request #3651 from spicyj/tac-noi
Don't thread index through traverseAllChildren
2015-05-14 10:32:49 -07:00
Elaine Fang
d24cfa6405 Add punctuation 2015-05-14 13:15:06 -04:00
Matthias Le Brun
4a012b0741 <option> added children flatten, & warn if invalid 2015-05-14 12:44:04 +02:00
Morhaus
12a43d4eee Better warnings for nested propTypes
`arrayOf`, `shape` and `objectOf` warnings now display the full path of
the invalid key.
2015-05-14 11:33:07 +02:00
Baraa Hamodi
b276af5c0a Update CONTRIBUTING.md
Make the contributing sentence make a little bit more sense.
2015-05-13 23:17:31 -07:00
Ben Alpert
05b98ac70c Merge pull request #3872 from spicyj/nested-num
Split message for deep numeric key warning too
2015-05-13 15:32:13 -07:00
Paul O’Shannessy
db25a63c12 Merge pull request #3869 from zpao/jsx-cleanup
JSX -> Babel cleanup
2015-05-13 15:31:48 -07:00
Paul O’Shannessy
76d016c6f1 Use Babel to transform JS in docs, update other calls 2015-05-13 15:26:23 -07:00
Ben Alpert
0a3aa8493a Split message for deep numeric key warning too 2015-05-13 15:23:29 -07:00
Ben Alpert
922d531445 Merge pull request #3871 from spicyj/group
Deprecate reactjs Google Group
2015-05-13 15:16:51 -07:00
Ben Alpert
ffabf4b5ff Deprecate reactjs Google Group 2015-05-13 15:16:33 -07:00
Ben Alpert
51843ec710 Merge pull request #3870 from spicyj/gh-3865
Clarify ReactElement prop validation message
2015-05-13 15:14:00 -07:00
Ben Alpert
bed4de3eca Clarify ReactElement prop validation message
Fixes #3865.
2015-05-13 12:37:54 -07:00
Ben Alpert
67aea08b4f Merge pull request #3861 from spicyj/nested-v
Split out warning message for nested key warning
2015-05-13 11:51:11 -07:00
Paul O’Shannessy
555d5dc35c Merge pull request #3864 from cvrebert/patch-1
bower.json: remove moot `version` field
2015-05-13 11:12:10 -07:00
Paul O’Shannessy
9769f96974 [docs] Move pre-compiled JS files 2015-05-13 10:57:47 -07:00
Paul O’Shannessy
b258d34c73 Don't run non-existant fbtransform tests 2015-05-13 10:52:51 -07:00
Chris Rebert
73c84c8319 bower.json: remove moot version field
Per a325da3d79
2015-05-12 22:31:18 -07:00
Ben Alpert
64c9d9d762 Split out warning message for nested key warning
Also make sure to mark child array as validated in cloneElement as well.
2015-05-12 16:33:04 -07:00
Ben Alpert
f0bdadf85b Merge pull request #3857 from spicyj/dev-rckv
Set _reactChildKeysValidated in dev mode only
2015-05-11 17:06:18 -07:00
Ben Alpert
0c58f4f6b1 Set _reactChildKeysValidated in dev mode only 2015-05-11 17:02:49 -07:00
Jim
6b19cf9ce3 Merge pull request #3856 from chaseadamsio/chaseadamsio-patch-1
Change object typo to objects
2015-05-11 13:56:58 -07:00
Chase Adams
a21b82d151 Change object typo to objects 2015-05-11 13:29:14 -07:00
Paul O’Shannessy
1549bae2ab Merge pull request #3834 from chicoxyzzy/remove_jslint
remove jslint comments
2015-05-10 22:52:57 -07:00
Paul O’Shannessy
1748dc8131 Merge pull request #3837 from davidneat/transition-group-appear-high-level-docs
Added transitionAppear docs
2015-05-10 22:51:46 -07:00
Paul O’Shannessy
7839e07231 0.14.0-alpha1 2015-05-10 22:36:50 -07:00
Paul O’Shannessy
64014c4641 Fix esprima-fb dependency 2015-05-10 22:25:08 -07:00
Ben Alpert
0de20e35bc Merge pull request #3852 from thewarpaint/patch-1
Add Wikipedia link to Cross-site scripting article on "XSS attack" string
2015-05-10 13:28:10 -07:00
Eduardo Garcia
ee7d7487ea Add Wikipedia link to Cross-site scripting on "XSS attack" string 2015-05-10 15:22:12 -05:00
Ben Alpert
4ba67670f9 Merge pull request #3841 from spicyj/yolo
Preserve prototype with replaceState
2015-05-08 13:16:43 -07:00
Ben Alpert
d7de12fbd8 Preserve prototype with replaceState
Fixes #3418.
2015-05-08 13:11:18 -07:00
David Neubauer
f17a15a07d added animate initial mounting section to animation docs 2015-05-08 20:31:11 +02:00
Paul O’Shannessy
e135a4dbc3 Follow-up to follow-up to #3718
Cleaned up a few more ununsed things.
2015-05-07 17:29:31 -07:00
Paul O’Shannessy
4bb7abf8fe Merge pull request #3835 from zpao/fix-keys-keys-keys-test
Followup to #3758 so we actually test things
2015-05-07 17:15:11 -07:00
Paul O’Shannessy
5da94d6eb0 Followup to #3758 so we actually test things 2015-05-07 17:10:51 -07:00
chico
553dd90528 remove jslint comments 2015-05-08 03:05:51 +03:00
Paul O’Shannessy
29d548fe65 Merge pull request #3831 from MadLittleMods/tab-size-unit-less
Add support for unitless tabSize/tab-size
2015-05-07 13:09:17 -07:00
Eric Eastwood
60e1f5a103 Add support for unitless tabSize/tab-size 2015-05-07 13:51:15 -05:00
Paul O’Shannessy
d71965b988 Merge pull request #3828 from chicoxyzzy/patch-1
add a badge with latest npm package published
2015-05-07 11:29:16 -07:00
Paul O’Shannessy
72ad0c11c3 Merge pull request #3829 from murashki/ReactMultiChildText-test.js-__html-typo
ReactMultiChildText-test.js fix __html typo
2015-05-07 10:34:08 -07:00
Paul O’Shannessy
1c4965060b Merge pull request #3830 from gberg1/patch-1
Formatting of line 19 ReactNativeComponent.js
2015-05-07 10:17:29 -07:00
David Goldberg
759a393ce5 Formatting of line 19 ReactNativeComponent.js
Corrected formatting error on line 19 of ReactNativeComponent.js by adding a period in order to be consistent with the other comments in the file.
2015-05-07 10:09:00 -07:00
Yakov Dalinchuk
9b798400fd ReactMultiChildText-test.js fix __html typo 2015-05-07 16:06:11 +03:00
Sergey R
b157088e71 add a badge with latest npm package published 2015-05-07 02:21:37 +03:00
Ben Alpert
1db70dbef1 Merge pull request #3718 from framp/master
Added support for namespace attributes
2015-05-05 16:48:21 -07:00
Ben Alpert
5f32953ac7 Follow-ups for #3718
- Rename NamespaceProperties to DOMAttributeNamespaces
- Make tests pass in jest
- Remove unnecessary xmlns attributes
2015-05-05 16:46:49 -07:00
Federico Rampazzo
a88b655ccd Added support for namespace attributes 2015-05-05 16:15:25 -07:00
Paul O’Shannessy
2b9a74c0e6 Merge pull request #3777 from zpao/deprecate-react-tools
Deprecate react-tools
2015-05-05 11:06:15 -07:00
Paul O’Shannessy
d2fe87892d Remove transforms from repo, react-tools
Time to just use jstransform.
2015-05-05 10:51:51 -07:00
Jim
e0890664a7 Merge pull request #3815 from neojski/isMounted-should-return-boolean
IsMounted should always return a boolean.
2015-05-05 02:51:49 -07:00
Tomasz Kołodziejski
5ef0b416df IsMounted should always return a boolean.
Fixes #3814. isMounted used to return undefined if internalInstance
was undefined after component was unmounted.
2015-05-05 11:43:09 +02:00
Ben Alpert
5509cd74a4 Merge pull request #3813 from spicyj/babel
Replace vendor/constants recast transform with babel
2015-05-04 17:43:14 -07:00
Ben Alpert
ceb92cd78c Replace vendor/constants recast transform with babel
Built files look the same up to parenthesization and quoting. This only saves 1.5 seconds out of ~20 on a clean build but it's a little simpler.
2015-05-04 17:05:42 -07:00
Paul O’Shannessy
aee3614d80 Merge pull request #3778 from masterfung/docs-update
updated some typos, grammers, and made sentences sound better
2015-05-04 16:27:38 -07:00
Tsung Hung
f34c2eab40 updated some typos, grammers, and made sentences sound better 2015-05-04 16:26:14 -07:00
Ben Alpert
a110c76558 Merge pull request #3801 from spicyj/babel
Use Babel to build React
2015-05-04 16:14:00 -07:00
Ben Alpert
8897b00989 Remove es3ify 2015-05-04 16:13:36 -07:00
Ben Alpert
93a782b40b Use Babel to build React
Size comparison:

```
   raw     gz Compared to master @ 6ed98ec0c8
     =      = build/JSXTransformer.js
-15736  -3247 build/react-with-addons.js
  +287     +7 build/react-with-addons.min.js
-14412  -2887 build/react.js
  +274    +15 build/react.min.js
```

Differences mostly look to be various bits of whitespace that Babel ends up removing during its transforms (https://gist.github.com/spicyj/21ef31f4d95fb7a58daf). In minified files, mostly additions of `"use strict";`.
2015-05-04 14:14:09 -07:00
Henry Zhu
0937e918aa jsdoc fixes 2015-05-04 16:04:49 -04:00
Ben Alpert
dc08ae4043 Merge pull request #3805 from hejld/master
Removed redundant grave accent character from Component API docs
2015-05-02 23:00:07 -07:00
Daniel Hejl
f81d52b854 Removed redundant grave accent character from Component API docs 2015-05-02 22:22:20 -07:00
Ben Alpert
70e64ef099 Merge pull request #3797 from marocchino/update-korean
Update Korean Translation to 9484d0f
2015-05-02 12:35:06 -07:00
Ben Alpert
a6d03f36a4 Merge pull request #3802 from spicyj/cleaner-depr
Better warning messages for deprecated methods
2015-05-02 10:05:30 -07:00
Paul O’Shannessy
c8d40e0f65 Update 2015-05-01-graphql-introduction.md
Typo
2015-05-01 17:01:17 -07:00
Ben Alpert
e06d3e0ab9 Better warning messages for deprecated methods 2015-05-01 13:32:31 -07:00
Paul O’Shannessy
b264372e2b Fix a couple grammar issues in GraphQL blog post 2015-05-01 12:36:30 -07:00
Paul O’Shannessy
693da719a3 GraphQL Introduction Blog Post 2015-05-01 11:18:44 -07:00
Jim
6ed98ec0c8 Merge pull request #3794 from jsfb/fix-thinking-in-react-blog-post
Fixed jsfiddles broken on https.  Fixes 3735.
2015-05-01 10:47:12 -07:00
Shim Won
ee38a36f50 Update Korean Translation to 9484d0f 2015-05-01 09:09:09 +09:00
Ben Alpert
9484d0fc39 Merge pull request #3795 from spicyj/batch-unmount
Batch updates within top-level unmount
2015-04-30 15:05:55 -07:00
Ben Alpert
36f3a2aaff Batch updates within top-level unmount
Analogous change to #2935.
2015-04-30 15:05:44 -07:00
Jim
34b99cc69e Fixed jsfiddles broken from https conversion. Fixes 3735 2015-04-30 13:05:53 -07:00
Ben Alpert
a092b47be5 Merge pull request #3785 from iamdustan/addons
npm build: create addons directory that loads from lib. Closes #3780
2015-04-29 15:31:20 -07:00
Dustan Kasten
5cfb712088 npm build: create addons directory that loads from lib. Closes #3780 2015-04-29 18:25:36 -04:00
Ben Alpert
571c327438 Merge pull request #3786 from HurricaneJames/master
check that React renders the menuitem closing tag
2015-04-29 14:43:16 -07:00
James Burnett
d42bf671d2 check that React renders the menuitem closing tag 2015-04-29 17:32:56 -04:00
Ben Alpert
64b1f05e75 Add more context to DOM nesting warning
Better version of #3578.
2015-04-29 14:20:23 -07:00
Ben Alpert
a56d0d6dc5 Merge pull request #3781 from spicyj/elval
Fix infinite recursion in browsers with iterators
2015-04-29 13:54:08 -07:00
Paul O’Shannessy
1427522151 Merge pull request #3784 from ef718/docs-punctuation
Add punctuation
2015-04-29 12:40:41 -07:00
Elaine Fang
50e974b5b6 Add punctuation 2015-04-29 11:07:48 -04:00
Ben Alpert
8cf226e442 Fix infinite recursion in browsers with iterators
My old code here didn't work properly -- for a string child, getIteratorFn would return an iterator that gave each character as its own string, and we'd attempt to loop over that too.

Tests now work in Chrome again.
2015-04-29 00:21:00 -07:00
Paul O’Shannessy
92e82c91a5 Merge pull request #3779 from katzoo/dry-quadratic-example
DRY quadratic formula example
2015-04-28 18:03:15 -07:00
katzoo
065f13a968 DRY quadratic formula example 2015-04-29 02:50:53 +02:00
Ben Alpert
1d8025258a Merge pull request #3722 from spicyj/travis-rel-grunt
Use local `grunt` executable on Travis
2015-04-28 14:55:34 -07:00
Ben Alpert
e534e0730e Use local grunt executable on Travis
Builds have been flaky lately. Maybe this will help?
2015-04-28 14:45:55 -07:00
Jim
49de80e692 Merge pull request #3767 from kubosho/patch-1
Use jQuery 2.1.3 (latest) to be up-to-date and consistent with other docs)
2015-04-28 06:42:52 -07:00
Shota Kubota
d376e12a9c Fix differences a jQuery CDN URLs, fixes #3750.
unify to `https://code.jquery.com/jquery-2.1.3.min.js`.
2015-04-28 22:27:46 +09:00
alexpien
6e5b0248db Update 10.1-animation.md
Custom classes
2015-04-27 19:16:24 -07:00
alexpien
039110f8bf Allow ReactCSSTransitionGroup to also take in object containing classNames instead of relying on manipulation of the transitionName property 2015-04-27 18:56:00 -07:00
Jim
40119404b9 Merge pull request #3740 from jsfb/element-is-parent-of-render-result-test
Added unit test to verify that context treats the component doing a render() as the parent.
2015-04-27 16:11:39 -07:00
Ben Alpert
3b10a7b038 Add forgotten clipPath wrapper in getMarkupWrap 2015-04-27 15:39:39 -07:00
codesuki
e3cf48cd7f Added support for SVG clipPath element and clip-path attribute 2015-04-27 15:37:23 -07:00
Jim
9a950e9a19 Added unit test to verify that context treats the component doing a render() as the parent. 2015-04-27 14:56:25 -07:00
Ben Alpert
d359319073 Merge pull request #3758 from spicyj/keys-keys-keys
Add key warning to nested collections
2015-04-27 14:51:30 -07:00
Ben Alpert
086636747f Add key warning to nested collections
Also when reusing elements in multiple contexts -- before we were mutating each element to indicate its validity; now we mutate the array containing it (which we create, in the case of rest-arg children).

Fixes #2496. Fixes #3348.
2015-04-27 14:41:25 -07:00
Ben Alpert
adcb420414 Merge pull request #3757 from spicyj/es6
Add missing super() calls
2015-04-27 14:31:03 -07:00
Ben Alpert
2d1a24e8df Add missing super() calls
Babel complains without these because it's invalid ES6.
2015-04-27 13:41:10 -07:00
Ben Alpert
8e9deff3cc Merge pull request #3749 from VictorKoenders/master
unmountChildren was missing an Object.hasOwnProperty check (src/core/ReactChildReconciler.js)
2015-04-26 15:09:48 -07:00
Victor Koenders
ed4daba87d src/core/ReactChildReconciler.js::unmountChildren was missing an Object.hasOwnProperty check 2015-04-26 13:54:16 +02:00
Cheng Lou
86dee966a4 Merge pull request #3747 from jayeszee/patch-1
Missing punctuations in comments.
2015-04-26 00:23:43 -04:00
Jack Zhang
f7a9a6c480 Missing punctuations in comments.
Added periods to two comment lines to ensure uniform format.
2015-04-25 20:50:30 -07:00
Chris Grovers
91029ffac1 Fixed Formatting. 2015-04-25 15:06:59 -07:00
Matthew Miner
aa9274991d Treat boxOrdinalGroup and flexOrder as unitless. 2015-04-24 17:05:07 -07:00
Cheng Lou
f6ae856797 Merge pull request #3739 from chenglou/style-mut-comments
Tweak style mutation warning, remove test comment
2015-04-24 15:08:24 -04:00
Cheng Lou
1df2b6f638 Tweak style mutation warning, remove test comment 2015-04-24 15:04:05 -04:00
Cheng Lou
288c7ed139 Merge pull request #2027 from chenglou/warn-style-mutation
Set up `style` mutation monitoring
2015-04-24 14:51:33 -04:00
Paul O’Shannessy
4dbccea975 Merge pull request #3734 from marocchino/update-korean
Update Translation to 0183f70
2015-04-23 23:03:47 -07:00
Shim Won
8d0937e60d Update Translation to 0183f70 2015-04-24 09:15:46 +09:00
Ben Alpert
0183f70797 Merge pull request #3727 from spicyj/dsih
Relax dangerouslySetInnerHTML validation
2015-04-22 17:37:40 -07:00
mheiber
39442aaa84 Update cloneWithProps documentation
Updated documentation to reflect that using React.cloneElement is the new way to copy an element and preserve `key` and `ref`.

Fixes #3432, closes #3447.
2015-04-22 17:05:59 -07:00
Ben Alpert
7f02455220 Relax dangerouslySetInnerHTML validation
Fixes #3460.
2015-04-22 16:59:50 -07:00
Ben Alpert
a171474348 Merge pull request #3429 from AoDev/patch-1
Add a note about react classe name convention
2015-04-22 16:11:56 -07:00
Jim
41348ba911 Merge pull request #3640 from jsfb/render-subtree-pass-context
Provide top level method for rendering subtree (passes context)
2015-04-22 14:29:06 -07:00
Jim
c93b4245cb Provide top level method for rendering subtree (passes context) 2015-04-22 14:25:29 -07:00
Jim
1a5fe9fd13 Merge pull request #3723 from jsfb/fix-bad-homepage-link
Fix bad links in docs.  Fixes #3654.
2015-04-22 13:35:02 -07:00
Jim
d900541021 Fix bad links in docs. Fixes #3654. 2015-04-22 13:17:39 -07:00
Ben Alpert
3c66b8f0f7 Merge pull request #3665 from mridgway/replaceHasOwnProperty
[performance] Replace hasOwnProperty in child processing with typeof undefined check
2015-04-22 11:21:38 -07:00
Scott Feeney
d235940037 Merge pull request #3716 from graue/optional-shallow-render-context
Shallow render components that define contextTypes
2015-04-22 10:54:40 -07:00
Paul O’Shannessy
5b42e895c1 Merge pull request #3691 from jonscottclark/patch-1
Add 'cache: false' to $.ajax when fetching comments (docs/tutorial)
2015-04-22 09:57:58 -07:00
Paul O’Shannessy
4f285b7ba0 Merge pull request #3676 from zpao/rm-withContext
Remove withContext from top-level API
2015-04-22 09:45:26 -07:00
Jon Scott Clark
f4a6644f4e Fix line highlighting in code blocks due to addition of extra example code 2015-04-22 10:45:15 -04:00
Scott Feeney
df937af91c Shallow render components that define contextTypes
You now no longer have to pass an undocumented extra argument to the
shallow renderer for rendering components with contextTypes to work.

Fixes #3696
2015-04-21 16:17:06 -07:00
Paul O’Shannessy
f0c7fa3098 Merge pull request #3712 from zpao/changelog-jsxtransformer
Update Changelog for 0.13 to mention JSXTransfomer change
2015-04-21 15:04:43 -07:00
Paul O’Shannessy
73cad28e22 Update Changelog for 0.13 to mention JSXTransfomer change 2015-04-21 15:04:13 -07:00
Ben Alpert
cc412367dd Merge pull request #3706 from spicyj/no-raf
Remove ReactRAFBatchingStrategy
2015-04-20 13:41:46 -07:00
Ben Alpert
302f0a1f5a Remove ReactRAFBatchingStrategy
We don't use or support this, so let's just delete it. (#3570)
2015-04-20 12:09:15 -07:00
Paul O’Shannessy
088d71c7c1 Merge pull request #3693 from reedloden/swap-http-to-https
SSL/TLSize all the things! (convert http:// to https:// where appropriate)
2015-04-20 11:02:29 -07:00
Paul O’Shannessy
7b89989c47 Merge pull request #3705 from zpao/doc/update-supported-attrs
[docs] Update supported HTML attributes
2015-04-20 10:45:36 -07:00
Jim
e5747b8ffb Merge pull request #3697 from basecode/improve-pooler-tests
Improve `PooledClass` tests
2015-04-20 10:41:18 -07:00
Paul O’Shannessy
1dff5a2009 [docs] Update supported HTML attributes 2015-04-20 09:56:55 -07:00
Paul O’Shannessy
cfc734bb33 Merge pull request #3703 from JimBobSquarePants/patch-1
Example is JSX not JS.
2015-04-20 09:40:23 -07:00
James South
8972ad921f Example is JSX not JS. 2015-04-20 14:26:39 +01:00
Tobias Reiss
e2fa43031e should call new and old constructor with arguments 2015-04-20 00:43:55 +02:00
Paul O’Shannessy
ec31267e1c Merge pull request #3694 from adamzap/fix-tutorial-line-highlighting
Fix missing line highlight in tutorial
2015-04-19 15:21:59 -07:00
Reed Loden
3e8951e8c7 SSL/TLSize all the things! (convert http:// to https:// where appropriate)
Update links to use https:// where it is supported. There's probably a lot
more that could be fixed, but these are the core ones I found (especially
the download links in order to prevent MITM attacks). Note that there are
some fb.me links that will redirect to http:// even while accessed over
https://, but this seemed like the best way to fix those for now.

NOTE: Only non-third-party files were modified. There are references to
http:// URLs in vendored/third-party files, but seems appropriate to fix
upstream for those rather than editing the files.

Also, copy one image locally to the blog, as it was hotlinking to a site
that did not support https://.

Last, use youtube-nocookie.com instead of youtube.com for video embeds,
as the former doesn't try to set a cookie on load (privacy enhancement).
2015-04-18 16:49:32 -07:00
Adam Zapletal
05562a0b09 Fix missing line highlight in tutorial 2015-04-18 18:36:18 -05:00
Paul O’Shannessy
feef6e885b Tweak wording in 0.13.2 blog post 2015-04-18 16:08:01 -07:00
Paul O’Shannessy
5a19481160 v0.13.2 blog post
(cherry picked from commit 6ed202288b)
2015-04-18 15:58:13 -07:00
Paul O’Shannessy
1185fdaf1f Update website with 0.13.2 builds
(cherry picked from commit 179f904525)
2015-04-18 15:58:11 -07:00
Paul O’Shannessy
8a691f59fe Readme for 0.13.2
(cherry picked from commit e1437078fc)
2015-04-18 15:57:05 -07:00
Paul O’Shannessy
3f5f78e374 Changelog for 0.13.2
(cherry picked from commit 4f1c61f915)
2015-04-18 15:57:05 -07:00
Jon Scott Clark
90f086efbf Add 'cache: false' to $.ajax when fetching comments 2015-04-18 11:11:18 -04:00
Jim
d9a9f5a0d4 Merge pull request #3625 from dmin/patch-1
Docs: Fix example JSX output
2015-04-17 14:22:25 -07:00
Paul O’Shannessy
550cce441f Merge pull request #3678 from marocchino/update-korean
Update Translation to 6a7a4fd
2015-04-17 11:12:45 -07:00
Christopher Chedeau
d8ef641bcc Merge pull request #3684 from vjeux/react-native-0-4
React Native 0.4 Blog Post
2015-04-17 09:13:31 -07:00
Christopher Chedeau
6fdac757c5 Update 2015-04-17-react-native-v0.4.md 2015-04-17 09:11:51 -07:00
Christopher Chedeau
4a1557b947 React Native 0.4 Blog Post 2015-04-17 09:03:55 -07:00
Shim Won
2d847a145c Update Translation to 6a7a4fd 2015-04-17 17:19:04 +09:00
Leonardo YongUk Kim
7e64c16ff6 Create 19-dangerously-set-inner-html.ko-KR.md
Based on 2e1ccae275
2015-04-17 17:15:51 +09:00
Paul O’Shannessy
5297ff66cf Remove withContext from top-level API 2015-04-16 15:58:27 -07:00
Ben Alpert
6a7a4fd635 Merge pull request #3675 from spicyj/gh-3655
Add warning for getDefaultProps on ES6 classes
2015-04-15 17:40:47 -07:00
Ben Alpert
b8b10001f3 Add warning for getDefaultProps on ES6 classes
Fixes #3655.
2015-04-15 17:33:20 -07:00
Paul O’Shannessy
e21f7c7da3 Merge pull request #3673 from ultrafez/patch-1
"Advanced performance" typo fix
2015-04-15 16:42:25 -07:00
Alex
729ec1bb74 "Advanced performance" typo fix
Example code used the key "propsTypes" - correct to "propTypes"
2015-04-15 15:32:37 +01:00
Paul O’Shannessy
41a6186d7a Merge pull request #3485 from jnu/ie10-flex-unitless
Treat flexPositive, flexNegative as unitless styles
2015-04-14 16:31:13 -07:00
Michael Ridgway
ed70d35e18 Update code style 2015-04-14 14:37:50 -07:00
Ben Alpert
45045049b0 Merge pull request #3668 from elquatro/master
Get rid of magic numbers in transitions example
2015-04-14 13:36:42 -07:00
Ilya Shuklin
0447f1e792 Update index.html
getting rid of magic numbers
2015-04-14 16:55:12 +03:00
Ben Alpert
be03fa7f46 Merge pull request #3663 from spicyj/san-md
[docs] Use marked instead of Showdown and escape HTML
2015-04-13 16:44:19 -07:00
Ben Alpert
36aefcb8cc [docs] Use marked instead of Showdown and escape HTML
Fixes #3501.
2015-04-13 15:50:40 -07:00
Ben Alpert
d8117d0df6 Merge pull request #1366 from spicyj/enterleave-testutils
Make Simulate.mouseEnter/Leave use direct dispatch
2015-04-13 15:39:54 -07:00
Michael Ridgway
5a431a12ac Replace hasOwnProperty in child processing with typeof undefined check 2015-04-13 14:17:16 -07:00
Paul O’Shannessy
6d868a2705 Merge pull request #3662 from zpao/update-uglify
Update uglify dependency
2015-04-13 13:18:30 -07:00
Paul O’Shannessy
d467b52758 Update uglify dependency
Apparently we needed to get to v2.4.17 to get the fix for #2247. We
shrinkwrapped on the same day but the timing didn't work out so we missed it.
2015-04-13 12:49:45 -07:00
Paul O’Shannessy
3c174cacc9 Merge pull request #3658 from sbezludny/patch-1
Fixed typo
2015-04-13 09:48:08 -07:00
Serg
1bf7648108 Fixed typo 2015-04-13 12:12:49 +03:00
Ben Alpert
ce215483ae Don't thread index through traverseAllChildren
I'm not super attached to this, but this feels cleaner to me. Might even be faster since flattenChildren doesn't use the index. Probably no change though.
2015-04-11 01:04:20 -07:00
Ben Alpert
88fb106c39 Merge pull request #3646 from facebook/revert-3580-2402-warn-multiple-copies-of-react-on-same-page
Revert "Warn when multiple instances of React are loaded on the same page"
2015-04-10 13:54:57 -07:00
Ben Alpert
8fa15080b2 Revert "Warn when multiple instances of React are loaded on the same page" 2015-04-10 12:34:04 -07:00
Paul O’Shannessy
b8ba8c83f3 Update Patent Grant
https://code.facebook.com/posts/1639473982937255/updating-our-open-source-patent-grant/
2015-04-10 12:15:29 -07:00
Paul O’Shannessy
c164c477fb Merge pull request #3645 from facebook/revert-3644-patch-1
Revert "Add webkitdirectory and nwdirectory attributes for input file"
2015-04-10 10:24:46 -07:00
Paul O’Shannessy
71fdf09630 Revert "Add webkitdirectory and nwdirectory attributes for input file" 2015-04-10 10:22:52 -07:00
Jim
5e9623d1a2 Merge pull request #3644 from gregorym/patch-1
Add webkitdirectory and nwdirectory attributes for input file
2015-04-10 10:16:40 -07:00
Gregory
5a7c6964cc Add webkitdirectory and nwdirectory attributes for input file
Add attributes for <input type="file" />
* webkitdirectory
* nwdirectory
2015-04-10 09:51:54 -07:00
Paul O’Shannessy
86c72a5271 Merge pull request #3642 from marocchino/ko-update
Update Korean translation to 0185c68
2015-04-09 16:37:24 -07:00
Isaac Salier-Hellendag
4ff99a2873 Merge pull request #3639 from salier/select-event-plugin
Skip SelectEventPlugin extraction if no listeners
2015-04-09 18:29:37 -05:00
Isaac Salier-Hellendag
47b147f392 Skip SelectEventPlugin extraction if no listeners
If there are no listeners for `onSelect` yet, do not extract events. This way we can avoid issues where listeners have been set up for some event dependencies for `SelectEventPlugin`, but not all.

For instance, if `topMouseDown` has been registered but not `topMouseUp`, event extraction will set the `mouseDown` flag to true but never unset it. This leads to bugs when `onSelect` is registered and should be firing during normal key behavior. Since no `topMouseUp` has yet occurred to unset the flag, `onSelect` fails to fire.
2015-04-09 17:55:42 -05:00
Shim Won
57f14017fb Update Korean translation to 0185c68 2015-04-10 06:54:28 +09:00
Leonardo YongUk Kim
78f59da8df Translate tips 11 to Korean
1. Create 11-dom-event-listeners.ko-KR.md
2. Update 03-interactivity-and-dynamic-uis.ko-KR.md to add an anchor.

Based on 52494f9d72
2015-04-10 06:52:32 +09:00
Leonardo YongUk Kim
792c161cc5 Create 12-initial-ajax.ko-KR.md
Based on 52494f9d72
2015-04-10 06:52:32 +09:00
Leonardo YongUk Kim
16832c701b Create 13-false-in-jsx.ko-KR.md
Based on 52494f9d72
2015-04-10 06:52:31 +09:00
Paul O’Shannessy
9d6b119c3f Merge pull request #3641 from ljharb/patch-1
Updating `es5-shim` URL
2015-04-09 14:24:26 -07:00
Jordan Harband
5ddd307c5e Updating es5-shim URL 2015-04-09 13:51:34 -07:00
Jim
0185c68c91 Merge pull request #3615 from jsfb/enable-new-context
Switch to parent-based context.  Fixes #2112.
2015-04-09 13:21:26 -07:00
Jim
0f0f5aa701 Merge pull request #3638 from devicehubnet/master
check if type.prototype is object in instantiateReactComponent
2015-04-09 12:35:57 -07:00
Paul O’Shannessy
857736dc13 Merge pull request #3636 from cody/jsx-target
Add target option to npm readme
2015-04-09 10:27:06 -07:00
Teodor Szente
cdd359b710 check if is undefined 2015-04-09 20:12:22 +03:00
Jim
f4a07c4b53 Merge pull request #3635 from garethnic/reuseCompDoc
Clarify sentence in Reusable Components doc
2015-04-09 10:01:10 -07:00
Teodor Szente
8f6bae21fb check if type.prototype is object 2015-04-09 19:29:25 +03:00
Stefan Dombrowski
148543ce2b Add target option to npm readme 2015-04-09 13:04:04 +02:00
Gareth Nicholson
5c35d93436 clarify sentence 2015-04-09 12:16:21 +02:00
Jim
f1cd867323 Merge pull request #3580 from robertknight/2402-warn-multiple-copies-of-react-on-same-page
Warn when multiple instances of React are loaded on the same page
2015-04-08 19:18:44 -07:00
Ben Alpert
50e08d4269 Merge pull request #3627 from spicyj/mut-warn-clone
Refer to cloneElement in mutation warning
2015-04-08 15:33:56 -07:00
Paul O’Shannessy
b6756c56ff Merge pull request #3584 from ThornWinters/patch-1
More Uniform Formating
2015-04-08 15:33:16 -07:00
Ben Alpert
177dfea503 Merge pull request #3628 from spicyj/do-not-bind
Kill ReactDoNotBindDeprecated
2015-04-08 15:28:07 -07:00
Ben Alpert
e60a26a682 Kill ReactDoNotBindDeprecated
No one uses this.
2015-04-08 15:15:02 -07:00
Ben Alpert
05f6e7de71 Refer to cloneElement in mutation warning 2015-04-08 14:51:17 -07:00
Ben Alpert
44f0e801df Merge pull request #3587 from spicyj/kill-plq
Kill ReactPutListenerQueue
2015-04-08 14:49:53 -07:00
David Mininger
86bac33408 Docs: Fix example JSX output 2015-04-08 14:23:49 -05:00
Paul O’Shannessy
ee811b1614 [docs] Fix typo
Introduced in #3589
2015-04-08 10:39:26 -07:00
Paul O’Shannessy
a34cf222ba Merge pull request #3604 from Charca/firefox-tests-fixes
Fixes for several failing tests in Firefox and Safari
2015-04-08 10:34:57 -07:00
Paul O’Shannessy
cf76365cd9 Merge pull request #3618 from TimeBomb/master
Document new es6module flag in react-tools README
2015-04-08 10:31:24 -07:00
Christoph Pojer
214c1f9919 Merge pull request #3622 from cpojer/copyright-headers
Add copyright headers to npm-react-codemod.
2015-04-08 10:29:06 -07:00
cpojer
245f0d0afa Add copyright headers to npm-react-codemod. 2015-04-08 10:28:20 -07:00
Jim
5b7f865ffe Merge pull request #3621 from bhamodi/master
Update Copyright notices to include 2015
2015-04-08 10:10:12 -07:00
Baraa Hamodi
8e806ba382 Merge pull request #2 from bhamodi/bhamodi-patch-1
Update ReactDOMIframe-test.js
2015-04-08 13:06:50 -04:00
Baraa Hamodi
d9d77bc9a5 Update ReactDOMIframe-test.js 2015-04-08 13:06:37 -04:00
Baraa Hamodi
9ecdd3600b Merge pull request #1 from bhamodi/2015-update
Update ReactCompositeComponentNestedState-test.js
2015-04-08 13:05:38 -04:00
Baraa Hamodi
c9e3a32bc5 Update ReactCompositeComponentNestedState-test.js 2015-04-08 13:02:43 -04:00
Jason
eb377195be Document new es6module flag in react-tools README 2015-04-08 01:01:54 -07:00
Ben Alpert
e27ad4add3 Merge pull request #3589 from theseyi/master
Documentation: Fixed typo / grammar in 'clone with props'
2015-04-07 17:33:52 -07:00
Ben Alpert
057f41ec0f Merge pull request #3595 from spicyj/select-ssr
Fix server-side rendering of <select>
2015-04-07 16:49:10 -07:00
Ben Alpert
ea089fdfe6 Fix server-side rendering of <select>
Fixes #1398.
2015-04-07 16:48:58 -07:00
Jim
7d44917531 Switch to parent-based context. Fixes #2112. 2015-04-07 14:49:29 -07:00
Paul O’Shannessy
3eb2a01ec1 Merge pull request #3612 from gaearon/patch-1
Mention Flux in “communicate between components”
2015-04-07 13:14:44 -07:00
Paul O’Shannessy
af819d122e Merge pull request #3614 from kassens/set_style_null
Fix for style not always reset when set to null
2015-04-07 13:13:31 -07:00
Jan Kassens
eda9ec53b5 Fix for style not always reset when set to null
When the style property existed, but was set to null, `this._previousStyleCopy`
was not set back to `null` causing an old value to persist. This broke setting
the style to `null` the next time.

Fixes #3606.
2015-04-07 12:17:06 -07:00
Dan Abramov
21d91e6f5f Mention Flux in “communicate between components” 2015-04-07 19:44:20 +03:00
Maxi Ferreira
49745e7bff Fixes for several failing tests in Firefox and Safari 2015-04-07 01:37:27 -03:00
Seyi Adebajo
5eaca79baa Documentation: Suggested edit adds clarity regarding when 'shouldComponentUpdate' is triggered and what the 're-rendering' process entails. 2015-04-05 18:46:38 -04:00
Seyi Adebajo
a366ec16e6 Fixed typo / grammar docs 2015-04-05 18:46:38 -04:00
Ben Alpert
ddbbaa9500 Merge pull request #3590 from koba04/patch-1
component.render method returns a ReactElement.
2015-04-04 23:47:05 -07:00
Toru Kobayashi
c7a2d46ead component.render method returns a ReactElement. 2015-04-05 15:33:19 +09:00
Ben Alpert
aee05c27ea Merge pull request #3588 from marocchino/ko-update
Update Korean translation to d402bd3
2015-04-04 22:26:50 -07:00
Shim Won
b9f02d37ed Update Korean translation to d402bd3 2015-04-05 09:44:54 +09:00
Ben Alpert
7529e6de47 Kill ReactPutListenerQueue
As far as I can tell, this is almost equivalent and is simpler. When a component's componentDidMount is called, all the listeners for that subtree will have been attached which I think is all that matters.
2015-04-04 17:34:35 -07:00
Michael Warner
0126e9efcd More Uniform Formating
Corrected so the formatting in this document matches the same as others.
2015-04-03 20:37:42 -07:00
Ben Alpert
d402bd3831 [docs] Fix type on renderIntoDocument
Fixes #3581.
2015-04-03 09:12:10 -07:00
Robert Knight
8ad58ae45a Warn when multiple instances of React are loaded on the same page
This causes a variety of hard-to-debug issues.
See #2402 for examples.

Fixes #2402
2015-04-03 11:46:58 +01:00
Paul O’Shannessy
5a3bda983b Merge pull request #3567 from chenglou/rm-getdomnode
Remove some `getDOMNode` from docs and DOMComponent test
2015-04-02 15:01:15 -07:00
Paul O’Shannessy
1576c1a2b9 Merge pull request #3576 from chenglou/last-getdomnode
Remove last call to `getDOMNode` in tests
2015-04-02 15:00:39 -07:00
Cheng Lou
f3e6436bee Remove last call to getDOMNode in tests 2015-04-02 17:26:19 -04:00
Cheng Lou
5561d0e925 Remove some getDOMNode from docs and examples 2015-04-02 17:23:27 -04:00
Ben Alpert
dea7efbe16 Merge pull request #3555 from spicyj/native-overrides
Import ResponderEventPlugin from react-native
2015-04-02 14:13:35 -07:00
Paul O’Shannessy
29dc96c202 Merge pull request #3574 from rogozhnikoff/patch-1
Increase speed of shallowEqual
2015-04-02 13:55:11 -07:00
Ben Alpert
5a01f5f6a9 Fix ResponderEventPlugin to work in core React again
Test Plan: jest, grunt fasttest
2015-04-02 13:33:47 -07:00
Murad
6963ea4bfc Update shallowEqual.js 2015-04-03 03:44:37 +08:00
Ben Alpert
54615fc6c0 Merge pull request #3572 from iamdoron/patch-1
use 'forEach' instead of 'map' when clearing intervals
2015-04-02 11:29:49 -07:00
Murad
d912329c97 Update shallowEqual.js
optimize for lint rules
2015-04-03 00:12:07 +08:00
Murad
d2bb4728f0 Increase speed of shallowEqual
All testes successfully completed.

- for-in in browsers is slow, i replaced him by Object.keys + for(array)
- simple check of lengths let us not iterate if not same
- now we dont need to test for B's keys missing from A, because if length's is same and prev check success - objB hasn't more keys
- micro optimize: calling objB.hasOwnProperty
- micro optimize: replaced !objA || !obj for more speedy check === null

#inspiredby https://github.com/jurassix/react-immutable-render-mixin/pull/4
2015-04-02 23:43:29 +08:00
iamdoron
f1e6a0dad2 use 'forEach' instead of 'map' when clearing intervals 2015-04-02 14:06:08 +03:00
Cheng Lou
6e992fbbdd Set up style mutation monitoring
This works by storing the style and its copy onto the component, and do
the appropriate comparison during `_updateDOMProperties`.
2015-04-01 22:05:09 -04:00
Jim
3fad007bdb Merge pull request #3560 from mariodu/mariodu
fix render order error in safari.  Fixes #3560.
2015-04-01 17:40:09 -07:00
Ben Alpert
db38059669 Merge pull request #3564 from spicyj/travis
Fix inverted feature test in .travis.yml
2015-04-01 15:17:32 -07:00
Ben Alpert
9c12e48f68 Fix inverted feature test in .travis.yml
I messed this up in #3540.
2015-04-01 15:12:17 -07:00
Ben Alpert
08e4420019 Use setState transaction for TransitionGroup instead of extra property 2015-04-01 14:34:01 -07:00
Ben Alpert
205273d2ee Merge pull request #2549 from ashtuchkin/fix-transitiongroup-multiremove
Fix ReactTransitionGroup behavior when removing several children at once
2015-04-01 14:33:42 -07:00
Paul O’Shannessy
dcc194bbb8 Merge pull request #3563 from quizlet/fix-addons-hasownproperty
Fix immutability helper to check hasOwnProperty safely
2015-04-01 12:38:04 -07:00
Jeff Chan
af7e43269f Fix immutability helper to check hasOwnProperty safely
This makes `update({}, {'hasOwnProperty': {$set: 'yolo'}})` work.
2015-04-01 12:25:12 -07:00
Paul O’Shannessy
7f30a1fed3 Merge pull request #3562 from dalinaum/rename
Rename 19--dangerouslySetInnerHTML.md -> 19-dangerously-set-inner-html.md
2015-04-01 12:13:55 -07:00
Leonardo YongUk Kim
2e1ccae275 Rename 19--dangerouslySetInnerHTML.md -> 19-dangerously-set-inner-html.md
1. It had double dash.
2. Its name was inconsistent. Other tips are named by their IDs.
2015-04-02 04:11:22 +09:00
凌恒
6094ebbc39 update comment 2015-04-01 23:59:43 +08:00
凌恒
54a74d95bb deal IE8 out of size error 2015-04-01 23:56:05 +08:00
凌恒
d4adaee4eb use ie8 feature detect instead of try catch 2015-04-01 21:46:40 +08:00
凌恒
e1a8d69840 fix render order error in safari 2015-04-01 18:13:03 +08:00
Ben Alpert
036d342189 Fix unused variable lint from #3552 2015-03-31 17:06:42 -07:00
Ben Alpert
5241ebb0bc Merge pull request #3556 from wali-s/patch-1
Fix small typo in 11-advanced-performance.md.
2015-03-31 17:03:15 -07:00
Ahmad Wali Sidiqi
4fe1b59849 Fix small typo in 11-advanced-performance.md.
"React didn't even had"->"React didn't even have"

http://english.stackexchange.com/questions/204603/proper-usage-of-didnt-had-or-didnt-have
2015-03-31 16:18:45 -07:00
Ben Alpert
6ec3b65169 Import ResponderEventPlugin from react-native
This is a direct import of the files from react-native, with the license headers updated.
2015-03-31 15:21:47 -07:00
Paul O’Shannessy
8c3d6b05d6 Merge pull request #3534 from tonyspiro/master
Update index.html in transitions example
2015-03-31 13:49:50 -07:00
Paul O’Shannessy
94a3b0f8a3 Merge pull request #3552 from James-Dunn/fix-for-loops
Remove caching from for loops
2015-03-31 10:30:44 -07:00
James
90dcc1ffb7 Remove caching from for loops
Removed caching from for loops as it does not seem to increase
performance and makes the code harder to read.
2015-03-31 10:22:52 +04:00
Paul O’Shannessy
18d608820e Merge pull request #3519 from jonchester/patch-1
Add IE-specific 'unselectable' attribute
2015-03-30 15:27:13 -07:00
Paul O’Shannessy
0c2238bb72 Merge pull request #3537 from marocchino/korean-update
Update Korean translations
2015-03-30 14:20:37 -07:00
Ben Alpert
a7a6c425d4 Merge pull request #3549 from spicyj/trans-sync
Sync transforms from internal
2015-03-30 14:15:09 -07:00
Ben Alpert
c9ef8f62ba Merge pull request #3445 from mihaip/master
Use full chain of member expressions when generating display names.
2015-03-30 11:46:54 -07:00
Ben Alpert
4d84784ca6 Sync transforms from internal 2015-03-30 11:43:26 -07:00
Ben Alpert
835fc3d0fb Squelch git warning on Travis 2015-03-30 11:25:55 -07:00
Ben Alpert
76805fdfda Set name and email a different way 2015-03-30 11:20:23 -07:00
Ben Alpert
be566e0aa6 Set git name and email for Travis 2015-03-30 11:16:36 -07:00
Ben Alpert
b7c4da59ca [docs] English tweaks (and testing Travis) 2015-03-30 11:10:44 -07:00
Ben Alpert
a39af74c6f Merge pull request #3540 from spicyj/auto-gh-pages
Autobuild website on Travis from stable branch
2015-03-30 10:57:06 -07:00
Ben Alpert
accb4f6047 Autobuild website on Travis from stable branch
$REACT_WEBSITE_BRANCH in https://travis-ci.org/facebook/react/settings/env_vars now needs to point to the stable branch (currently 0.13-stable). I haven't tested the commit-and-push part of this but everything else works so I'm hopeful.
2015-03-30 10:56:41 -07:00
Ben Alpert
b20778a7f6 Merge pull request #3543 from spicyj/keep-docs-js-react
Keep docs/js/{react,JSXTransformer}.js in repo
2015-03-30 10:55:29 -07:00
jonchester
a0265fe8b7 Add IE-specific 'unselectable' attribute
I ended up needing to add this attribute to work around a common IE bug, that clicking on a scrollbar gives focus to the scroll container. I needed to set it as MUST_USE_ATTRIBUTE or the attribute would not be passed through by React successfully.

remove trailing spaces
2015-03-30 07:44:08 -07:00
Christopher Chedeau
bfe1c5b60d Merge pull request #3545 from vjeux/roundup_26
Roundup 26
2015-03-30 07:23:20 -07:00
Christopher Chedeau
6bb2185bf0 Roundup 26 2015-03-29 20:02:40 -07:00
Paul O’Shannessy
ec2f35e0c9 Merge pull request #3544 from prathamesh-sonpatki/fix-link-to-display-name
Fixed link to displayName component spec from JSX in depth article
2015-03-29 10:30:24 -07:00
Prathamesh Sonpatki
139020d982 Fixed link to displayName component spec from JSX in depth article 2015-03-29 16:50:33 +05:30
Paul O’Shannessy
15e6968ad5 Merge pull request #3539 from russellpwirtz/patch-1
Update tutorial.md
2015-03-28 21:26:29 -07:00
Ben Alpert
0b6c7c29fe Keep docs/js/{react,JSXTransformer}.js in repo
This way we don't need to rebuild them each time for the website.
2015-03-28 14:56:54 -07:00
Russ
fdcf1f2b0e Update tutorial.md
Grammar fix
2015-03-28 11:37:55 -07:00
Ben Alpert
f3d3ccb8b3 Update README.md 2015-03-28 10:55:15 -07:00
James Pearce
78dd5e2c1e Update README.md 2015-03-28 10:33:56 -07:00
James Pearce
494be2179c 'New' note 2015-03-28 10:33:15 -07:00
Shim Won
6911fa5c5b Update Korean translation to b3c75d8 2015-03-28 18:02:25 +09:00
jiyeonseo
0b3fe6f47e Translate tips 05..10
- Up to 3fd6ac5
2015-03-28 08:51:52 +09:00
Jinwoo Oh
45a3332a38 Translate tip-18 to Korean
- Up to 6f44f60
2015-03-28 08:47:18 +09:00
Jinwoo Oh
4df79154de Translate tip-17 to Korean
- Up to 6f44f60
2015-03-28 08:47:12 +09:00
Jinwoo Oh
452f2f282f Translate tip-16 to Korean
- Up to 1cb3f25
2015-03-28 08:47:05 +09:00
Jinwoo Oh
23a5a89077 Translate tip-15 to Korean
- Up to 52494f9
2015-03-28 08:46:57 +09:00
Jinwoo Oh
03666e884d Translate tip-14 to Korean
- Up to 92c37ff
2015-03-28 08:46:37 +09:00
Ted Kim
aa6bfb6b51 Translate tips 01..04 (based on 157d7770c99be26a9e0557d00978f15f6d9db794) 2015-03-28 08:46:26 +09:00
Shim Won
712710cabc Update to ed257cb 2015-03-28 08:46:14 +09:00
Tony Spiro
03e0ebf532 Update index.html
'current' makes more sense than 'start' as the value increments passed it's start value.
2015-03-27 15:17:07 -05:00
Paul O’Shannessy
e30dd83896 Merge pull request #3240 from reactkr/translate-ko-release
Korean translation for docs
2015-03-27 11:39:54 -07:00
Jim
b3c75d82b2 Merge pull request #3521 from grant/master
Display error when trying to create an element of type `boolean`. Fixes #3478
2015-03-26 14:39:32 -07:00
Jim
335221910d Merge pull request #3527 from mertkahyaoglu/master
remove unrelated doc line
2015-03-26 14:27:42 -07:00
Ben Alpert
56067147fe Merge pull request #3529 from uzarubin/patch-1
Swapping defaultChecked and defaultValue
2015-03-26 13:51:25 -07:00
Ustin Zarubin
c45fa8b581 Swapping defaultChecked and defaultValue
The current documentation states that the `<select>` tag supports `defaultChecked`, but it actually doesn't. I believe this documentation was meant to be written in the proposed order. 

Non-working fiddle using `defaultChecked`: http://jsfiddle.net/jqs1hsLr/1/
Working fiddle using `defaultValue`: http://jsfiddle.net/nv7z0yzL/1/
2015-03-26 16:42:36 -04:00
Ben Alpert
c3b0d8d9c6 Merge pull request #3525 from spicyj/home-3
[docs] Tweak words on homepage
2015-03-26 12:29:59 -07:00
Ben Alpert
eef22ece37 [docs] Split up second sentence more 2015-03-26 12:29:14 -07:00
Mert Kahyaoğlu
6248406d6a remove unrelated doc line 2015-03-26 21:08:32 +02:00
Ben Alpert
cf956ac8be [docs] Tweak words on homepage 2015-03-26 10:42:01 -07:00
Ben Alpert
951adcdd4c Add React Native blog post 2015-03-26 10:10:43 -07:00
Grant Timmerman
59a914aac0 Disable numeric element types 2015-03-26 10:07:56 -07:00
Ben Alpert
ca66399402 [docs] Update site nav 2015-03-26 10:06:09 -07:00
Grant Timmerman
3c9ea72795 Display error when trying to create an element of type boolean. Fixes #3478 2015-03-26 01:21:54 -07:00
Ben Alpert
b32fbef7c5 Add missing semicolon 2015-03-25 18:10:49 -07:00
Ben Alpert
a4630c3928 Merge pull request #3520 from spicyj/validate-message
Tweak validation message, add html support
2015-03-25 17:43:55 -07:00
Ben Alpert
7c6694987d Tweak validation message, add html support
The old message made no sense if you had a > div > a or similar. I'm clearly feeling sloppy today.
2015-03-25 17:24:13 -07:00
Ben Alpert
da598c6a27 Merge pull request #3518 from alopatin/patch-1
Docs: Clarify that React.PropTypes.node accepts fragments
2015-03-25 17:23:52 -07:00
Paul O’Shannessy
6cb0b985a7 Merge pull request #3504 from clariroid/docsJP
Translate 2 docs into Japanese
2015-03-25 17:20:59 -07:00
Alex Lopatin
6daa22be5a Docs: Clarify that React.PropTypes.node accepts fragments
As of #3293 `ReactFragment` counts as a node, but this isn't made clear in the docs.
2015-03-25 17:17:42 -07:00
Ben Alpert
07b7e8424d Remove stray console.log comment 2015-03-25 17:06:42 -07:00
Ben Alpert
7bef374f3f Merge pull request #3517 from spicyj/jest-config
Only run src/ and vendor/fbtransform/ tests in jest
2015-03-25 17:06:26 -07:00
Ben Alpert
98fff82336 Merge pull request #3516 from spicyj/valid-4
Validate only against problematic tag nesting
2015-03-25 17:01:09 -07:00
Paul O’Shannessy
029a526916 Merge pull request #3498 from AnSavvides/patch-1
Include latest version of jQuery in tutorial
2015-03-25 16:53:13 -07:00
Ben Alpert
d12c968dec Only run src/ and vendor/fbtransform/ tests in jest
Test Plan: jest
2015-03-25 16:49:01 -07:00
Ben Alpert
76bb96ef21 Validate only against problematic tag nesting
Turns out lots of people write invalid HTML all the time and no one, including your browser or React, cares. Most invalid HTML combinations don't cause magic reparented nodes; only some do. The HTML5 parsing spec (https://html.spec.whatwg.org/multipage/syntax.html) specifies which tag combinations cause strange parsing behavior. I did my best to encode the logic here. It's more lenient than before in some cases, but more strict in others (before we didn't look at the whole stack of tags; now we warn with deeply nested `p` or `form` or `a` tags).
2015-03-25 16:43:41 -07:00
Christoph Pojer
949349d5ca Merge pull request #3515 from cpojer/fix-class-transform
npm-react-codemod: Class transform doesn’t need aliases
2015-03-25 16:35:18 -07:00
cpojer
bc8b057bf0 npm-react-codemod: Class transform doesn’t need an alias for module.exports = React.createClass any longer.
Before: `module.exports = class __exports extends React.Component {}`
After: `module.exports = class extends React.Component {}`

See 638ef2b9d2
2015-03-25 16:31:23 -07:00
Christoph Pojer
86836c885d Merge pull request #3506 from cpojer/react-codemod
Add npm-react-codemod
2015-03-25 16:20:14 -07:00
cpojer
1865c042d7 Update README for npm-react-codemod 2015-03-25 16:15:07 -07:00
cpojer
d9c13c73b6 Add ES6 class transform 2015-03-25 16:11:52 -07:00
cpojer
d4cb2537af Add pure-render-mixin transform 2015-03-25 16:11:52 -07:00
cpojer
20004e94d3 Add findDOMNode transform 2015-03-25 16:11:52 -07:00
cpojer
328274bbba Add ReactUtils and array polyfills. 2015-03-25 16:11:52 -07:00
cpojer
e361fcb3e6 Add skeleton for react-codemod 2015-03-25 16:11:48 -07:00
Andreas Savvides
580f2d829b Include latest version of jQuery in tutorial
Include latest version of jQuery 2.x in tutorial
2015-03-25 22:36:27 +00:00
clariroid
a869a0f7b0 Fix the locale id 2015-03-26 06:15:52 +09:00
clariroid
574b906f9b Translate 2 docs into Japanese 2015-03-26 06:15:50 +09:00
Paul O’Shannessy
27a191e704 Merge pull request #3513 from agelter/master
Added support for the 'low', 'high', and 'optimum' attributes that are missing from the <meter> tag.
2015-03-25 12:17:07 -07:00
Paul O’Shannessy
56b180b464 Fix failing test
PR #3494 was based on master before we shifted to using console.error. This
just fixes the new test case.
2015-03-25 12:15:41 -07:00
Jim
13dbda3644 Merge pull request #3494 from letiemble/B_Context_Rerender
Fix the context handling when updating a rendered component.
2015-03-25 11:55:35 -07:00
Paul O’Shannessy
8bd9541e08 Merge pull request #3503 from aredridel/patch-1
npm without -g should never need sudo
2015-03-25 10:55:41 -07:00
Paul O’Shannessy
a164222367 Merge pull request #3507 from dpellier/master
Add scoped property to the list of DOM standard properties
2015-03-25 10:54:29 -07:00
Paul O’Shannessy
f86a7f86cc Merge pull request #3511 from AnSavvides/glossary-space
Minor space change to be in line with coding style everywhere else
2015-03-25 10:51:15 -07:00
Aaron Gelter
c9e82ce0f6 Added support for the 'low', 'high', and 'optimum' attributes that the <meter> tag requires. 2015-03-25 11:33:02 -06:00
Andreas
b6534bec7d Minor space change to be in line with coding style everywhere else 2015-03-25 17:09:58 +00:00
Damien Pellier
3d45c0ad9d add scoped property to the list of DOM standard properties 2015-03-25 09:41:05 +01:00
Aria Stewart
151384dd22 npm without -g should never need sudo 2015-03-24 19:47:31 -07:00
Paul O’Shannessy
45fdb4ba79 Merge pull request #3487 from zpao/doc/video
[docs] Videos: use https, right width videos
2015-03-24 14:18:36 -07:00
Paul O’Shannessy
21bb7582c0 Merge pull request #3491 from bobbyrenwick/transition-group-appear-docs
adding docs for componentWillAppear and componentDidAppear
2015-03-24 14:05:11 -07:00
Paul O’Shannessy
09ecf8bca9 Merge pull request #3499 from sverrejoh/patch-1
Don't add 'px' to strokeDashoffset CSS Properties
2015-03-24 13:57:02 -07:00
Sverre Johansen
77abea5ddc Reordered properties to maintain ABC order 2015-03-24 20:43:55 +00:00
Ben Alpert
6ad4afd404 Merge pull request #3502 from spicyj/tests
Fix tests after merge of #3440
2015-03-24 13:41:34 -07:00
Paul O’Shannessy
2795fb162a Merge pull request #3490 from chenglou/remove-class-addon
Remove classSet/cx
2015-03-24 13:39:47 -07:00
Ben Alpert
4dde417214 Fix tests after merge
Test Plan: jest
2015-03-24 13:37:39 -07:00
Ben Alpert
9260b540ad Merge pull request #3467 from spicyj/valid-3
Validate node nesting, take 3
2015-03-24 13:30:16 -07:00
Ben Alpert
1aa4e3c234 Merge pull request #3440 from spicyj/console-error
Use console.error to show stack trace in console
2015-03-24 13:30:01 -07:00
Sverre Johansen
c28059e39b Don't add 'px' to strokeDashoffset CSS Properties
This is a SVG CSS Property. The standard expects values or percentages, and adding "px" to the value will break it.

http://www.w3.org/TR/SVG/painting.html#StrokeDashoffsetProperty
2015-03-24 17:52:02 +00:00
Laurent Etiemble
357345a56d Fix the context handling when updating a rendered component. 2015-03-24 08:29:09 +01:00
Bob Renwick
3b33ead6ac adding docs for componentWillAppear and componentDidAppear 2015-03-24 01:41:04 +00:00
Cheng Lou
9df173113b Remove mention from docs 2015-03-23 20:13:24 -04:00
Cheng Lou
18ab88aa78 Remove classSet/cx 2015-03-23 17:59:27 -04:00
Paul O’Shannessy
cb05e2f85b Merge pull request #3271 from delftswa2014/fix/todo-example
Added the key attribute into the todo example
2015-03-23 14:54:08 -07:00
Paul O’Shannessy
90f8a89ac4 Merge pull request #3488 from delftswa2014/grunt-coverage-fix
Removed build:test from test:coverage.
2015-03-23 14:49:56 -07:00
PNikray
e931aaab4a Removed build:test from test:coverage.
This was a duplicate task for build:withCodeCoverageLogging.
It should now properly output the lines which are not covered.
2015-03-23 21:32:49 +01:00
Paul O’Shannessy
21221e0376 [docs] Videos: use https, right width videos
I also added some <hr>s in there, which helps a little bit with spacing.
2015-03-23 11:38:10 -07:00
Paul O’Shannessy
11983d8d6b Merge pull request #3483 from julen/docs/document-body-footgun
Docs: do not render components to `document.body`
2015-03-23 11:09:48 -07:00
Paul O’Shannessy
dd2e2ecaee Merge pull request #3481 from mertkahyaoglu/master
minor fixes in package.json
2015-03-23 09:45:13 -07:00
Joseph Nudell
51b6092264 Update unprefixed css props doc 2015-03-23 11:30:56 -05:00
Joseph Nudell
30b2cfc1fd Treat flexPositive/Negative/boxFlex as unitless styles 2015-03-23 11:29:55 -05:00
Julen Ruiz Aizpuru
d83596620f Docs: do not render components to document.body
Rendering to `document.body` in the examples is conveniently short, but it can
be misleading at the same time, especially for newcomers.

While it's possible to render React components to `document.body`, any 3rd
party scripts can also mess up with it, and it can have unintended consequences
and be source of difficult-to-trace bugs.
2015-03-23 13:59:24 +01:00
Mert Kahyaoğlu
31bab53cc8 minor fixes in package.json 2015-03-22 22:09:24 +02:00
Ben Alpert
5dee15273f Merge pull request #3475 from MaximAbramchuck/patch-1
Add missing semicolon
2015-03-21 13:43:22 -07:00
Maxim Abramchuk
9b70e82246 Add missing semicolon 2015-03-21 23:11:45 +03:00
Ben Alpert
f9abf493b4 Validate node nesting, take 3
Nicer version of #644 and #735. Fixes #101. Context is neat.
2015-03-20 16:10:02 -07:00
Ben Alpert
ed3e6ecb9b Merge pull request #3472 from mertkahyaoglu/master
move getReactRootElementInContainer to ReactMount.js
2015-03-20 12:29:53 -07:00
Mert Kahyaoğlu
63aa7259b9 move getReactRootElementInContainer to ReactMount.js
getReactRootElementInContainer.js file contains one function used only
in ReactMount.js.
2015-03-20 20:50:11 +02:00
Paul O’Shannessy
786055415b Merge pull request #3129
Put comma after any non-whitespace non-comment characters in JSXExpression
2015-03-20 10:32:11 -07:00
Jason Miller
ef796790ec Put comma after any non-comments, non-whitespace in JSXEspression
Fixes #1673
Closes #3129
2015-03-20 10:27:21 -07:00
Ben Alpert
70f16cc936 Merge pull request #3471 from mertkahyaoglu/master
fix doc comments and typos
2015-03-20 10:02:49 -07:00
Mert Kahyaoğlu
0c1eca7dfc fix doc comments and typos 2015-03-20 18:21:29 +02:00
Mihai Parparita
fea7bc5968 Use full chain of member expressions when generating display names.
Assumed to be namespaced names (with the exception of "exports", which is
special-cased).
2015-03-19 16:46:55 -07:00
Ben Alpert
7fe5a3aadd Merge pull request #3442 from spicyj/kill-initializeTouchEvents
Kill React.initializeTouchEvents for good
2015-03-19 14:15:26 -07:00
Ben Alpert
41e5518135 Merge pull request #3464 from martomi/html-tags
Examples - Fix a closing html paragraph tag.
2015-03-19 13:09:09 -07:00
Martin Mihaylov
d7bf64396a Fix the closing html paragraph tag. 2015-03-19 20:56:49 +01:00
Joseph Savona
f707f74c8a Merge pull request #3463 from josephsavona/relay-components
Building The Facebook News Feed With Relay
2015-03-19 12:56:21 -07:00
Joseph Savona
85e7598ef1 Building with Relay blog post 2015-03-19 12:53:49 -07:00
Ben Alpert
1a102a2ed8 Merge pull request #3456 from cody/html-jsx
Fix HTML to JSX converter to work with https
2015-03-19 12:45:41 -07:00
Stefan Dombrowski
89b17330ac Fix HTML to JSX converter to work with https 2015-03-19 00:33:14 +01:00
Christoph Pojer
d86790f4b6 Merge pull request #3441 from cpojer/rm-perf
Remove perf folder
2015-03-18 12:28:55 -07:00
Ben Alpert
a321247ee5 More lint fixes 2015-03-17 14:17:03 -07:00
Ben Alpert
26664315a6 Merge pull request #3438 from spicyj/lint
Lint fixes
2015-03-17 14:14:57 -07:00
Christoph Pojer
0098168b60 Merge pull request #3439 from cpojer/dom-node-warn
Add warning for getDOMNode calls.
2015-03-17 14:14:16 -07:00
Ben Alpert
9c4c2f58ea Kill React.initializeTouchEvents for good
Now that #1169 is fixed, the only thing this is used for is to determine whether `onTouchTap` causes touch listeners to be added. The only internal uses of TapEventPlugin are where touch events are already initialized (so this doesn't make a difference) and we don't support `onTouchTap` as part of the public API so this should be safe.
2015-03-17 14:12:26 -07:00
cpojer
fb23276178 Add warning for getDOMNode calls. 2015-03-17 14:08:04 -07:00
cpojer
7291942550 Remove perf folder 2015-03-17 13:40:11 -07:00
Ben Alpert
e791fccf58 Use console.error to show stack trace in console
Better version of #3277.

Test Plan: jest, grunt test
2015-03-17 13:39:04 -07:00
Ben Alpert
c34fa7f3d2 Lint fixes 2015-03-17 13:30:15 -07:00
Ben Alpert
9a6fa5eb7d Merge pull request #3430 from fourcolors/patch-1
fix grammar in comments
2015-03-17 11:08:40 -07:00
Ben Alpert
5d9b228e03 Merge pull request #3433 from mihaip/master
Include the owner name when warning about createElement(null/undefined).
2015-03-16 22:21:33 -07:00
Mihai Parparita
60a101eced Include the owner name when warning about createElement(null/undefined).
Makes it easier to find the callsite that needs to be fixed.
2015-03-16 22:05:29 -07:00
Sebastian Markbåge
dc9dcdba86 Merge pull request #3431 from sebmarkbage/ignoreowner
Don't use owner to determine statefulness
2015-03-16 18:08:21 -07:00
Sebastian Markbage
50cbdbc9ab Don't use owner to determine statefulness
This reverts an early commit that made it so that elements from two
different owner in the same slot wouldn't share state.

That behavior was helpful, and we did hit a case which was solved by this.
However, this pattern is extremely uncommon. I've yet to even find the
original case, let alone any existing cases in our codebase.

Therefore, we're dropping this to simplify elements and enable new
optimizations.
2015-03-16 18:05:15 -07:00
Paul O’Shannessy
c48ccc5742 0.13 blog post, starter kit 2015-03-16 16:59:22 -07:00
Paul O’Shannessy
77f011f82f Update Readme for 0.13.1 2015-03-16 16:59:21 -07:00
Paul O’Shannessy
efc88bad76 Changelog for 0.13.1 2015-03-16 16:59:21 -07:00
Jim
87e14c5ef8 Merge pull request #3176 from jsfb/webcomponent-to-vendor-thirdparty
Added webcomponents.js and a simple unit test verifying a document fragment as a valid React container
2015-03-16 16:40:22 -07:00
Jim
12059299f3 Added webcomponents.js and a simple unit test verifying a document fragment as a valid React container. 2015-03-16 16:37:05 -07:00
Jim
73f4dc59d8 Merge pull request #3169 from jsfb/mount-into-shadowdom
Allow rendering into document fragments. Fixes #840
2015-03-16 16:15:03 -07:00
Paul O’Shannessy
10112672b1 Merge pull request #3395 from Simek/reactComponentExpect-cleanup
toBeDOMComponentWithChildCount readability
2015-03-16 16:14:48 -07:00
Sterling Cobb
b59e7e60b5 fix grammer in comments 2015-03-16 17:10:14 -06:00
AoDev
83a2465af9 Add a note about react classe name convention
I lost quite some time trying to figure out what was happening. No error in console and nothing showing up.
2015-03-16 23:59:02 +01:00
Paul O’Shannessy
dacd4db1fa Merge pull request #3427 from zpao/full-page-dom-components
Ensure FullPageComponents are treated as DOM components
2015-03-16 15:39:40 -07:00
Paul O’Shannessy
99cbaed836 Ensure FullPageComponents are treated as DOM components
We currently override a couple DOM components. We need to ensure everything we
override is still treated as a DOM component, even if it has a composite
component wrapper.
2015-03-16 15:18:39 -07:00
Paul O’Shannessy
93e67a0a5b Merge pull request #3425 from zpao/fix-pure-test
Fix PureRender test to use providesModule
2015-03-16 15:14:26 -07:00
Ben Alpert
0a312bba89 Merge pull request #3414 from spicyj/gh-3407
Fix up Perf a bit better for 0.13
2015-03-16 14:04:28 -07:00
Paul O’Shannessy
bb0fc28fac Fix PureRender test to use providesModule 2015-03-16 13:56:43 -07:00
Paul O’Shannessy
b0a59a643a Merge pull request #3381 from zpao/jsx-nonstrictmodule
Fix module option parsing of jsx command
2015-03-16 13:24:35 -07:00
Paul O’Shannessy
4c9a07aad4 Merge pull request #3419 from xmo-odoo/patch-1
Link to inserting raw HTML document
2015-03-16 13:22:33 -07:00
Jim
f3f1294589 Merge pull request #2842 from Acubed/master
Generate XML-compatible void tags and boolean attributes
2015-03-16 12:49:59 -07:00
Jim
fb2999076c Merge pull request #3422 from jviereck/doc-typo-fix
Fix small typo ("of" instead of "or")
2015-03-16 11:03:06 -07:00
Julian Viereck
c6108afdc7 Fix small typo 2015-03-16 18:27:04 +01:00
Paul O’Shannessy
a9e787665d Merge pull request #3413 from zpao/travis
Fix TravisCI fast bail check
2015-03-16 09:28:45 -07:00
xmo-odoo
f0c7b0c8ed Link to inserting raw HTML document 2015-03-16 10:51:20 +01:00
Austin Wright
29416f422e Appease eslint 2015-03-14 14:08:18 -07:00
Austin Wright
b52bb22342 Move list of newline-eating tags to variable 2015-03-14 13:57:15 -07:00
Austin Wright
030a7b34c7 Add back \n-to-be-eaten for the plain-text elements
The comment hack to enable polyglot HTML isn't cross-browser, or simply doesn't work.
2015-03-14 13:53:12 -07:00
Austin Wright
8e714f9898 Update tests to use Polyglot profile of HTML 2015-03-14 13:53:12 -07:00
Austin Wright
e913e85e1a Use a Polyglot HTML-safe method of escaping leading newline in rawtext elements 2015-03-14 13:53:12 -07:00
Austin Wright
8bc828aa7c Generate XML-compatible tags and boolean attributes 2015-03-14 13:53:12 -07:00
Ben Alpert
98671fda1a Fix up Perf a bit better for 0.13
_mountImageIntoNode moved into ReactMount and wasn't being counted where it was supposed to be. In addition, all DOM elements are now wrapped in a composite wrapper but for the perf tools we want to skip over those or else we'll double-count (at least with the current accounting -- and that's effectively what we did before so this brings us back up to parity).

Fixes #3407.

Test Plan:
Used the jsbin from #3407 and saw similar output from this branch and 0.12:

![image](https://cloud.githubusercontent.com/assets/6820/6649816/4d7202e0-c9b2-11e4-9364-e1b50c96b55b.png)
2015-03-13 18:51:53 -07:00
Paul O’Shannessy
08b1515f7f Update TravisCI to use exiting env var
$TRAVIS_COMMIT_RANGE was broken but it seems what we're doing is worse and
resulting in false negatives.

The result of the bad range was that we weren't running lint or tests for
things we should have been. It actually looks like $TRAVIS_COMMIT has been
wrong and it's not clear why this has been working at all.
2015-03-13 18:39:47 -07:00
Paul O’Shannessy
68a2f89cc6 Merge pull request #3402 from vkramskikh/fix-empty-selects-with-value
Fix for empty <select> elements with value
2015-03-13 18:04:57 -07:00
Ben Alpert
ed257cb691 Merge pull request #3412 from spicyj/gh-3329
Squash getDOMNode warning from isDOMComponent
2015-03-13 17:55:02 -07:00
Ben Alpert
70985ba68d Squash getDOMNode warning from isDOMComponent
Fixes #3329.
2015-03-13 17:11:02 -07:00
Ben Alpert
bcd70ad500 Merge pull request #3410 from robertknight/3409-style-null-to-nonnull
Fix incorrect update of style when props.style transitions from null to non-null
2015-03-13 17:07:01 -07:00
Robert Knight
ee86942d77 Fix incorrect update of style when props.style transitions from null to non-null
ReactDOMComponent maintains a copy of the previous style
object to support in-place mutations of props.style.

This cached object was not cleared when the style
property was removed in a props update.

Fixes #3409
2015-03-13 22:16:19 +00:00
Vitaly Kramskikh
2f52d81865 Fix for empty <select> elements with value
There is an exception when value or defaultValue is set but there are no
children as ReactDOMSelect tries to mark the first children as selected
even if there are no children.
2015-03-13 21:48:02 +07:00
Paul O’Shannessy
228c00b813 Merge pull request #3397 from koba04/eslint-ignore-built-files
ESLint ignores built files
2015-03-12 18:25:42 -07:00
Toru Kobayashi
ed0e242e07 ESLint ignores built files 2015-03-13 09:58:20 +09:00
Sebastian Markbåge
ca8d7cba1b Merge pull request #3355 from cpojer/shallowCompare
Add shallowCompare module and use it in PureRenderMixin + tests
2015-03-12 17:45:22 -07:00
Bartosz Kaszubowski
4b1d7bcec2 toBeDOMComponentWithChildCount readability 2015-03-13 00:15:32 +01:00
Paul O’Shannessy
d19636295b Merge pull request #3394 from cody/getDOMNode
Fix in docs: getDOMNode --> findDOMNode
2015-03-12 14:12:23 -07:00
Stefan Dombrowski
84e6a392a3 Fix in docs: getDOMNode --> findDOMNode 2015-03-12 22:07:03 +01:00
Ben Alpert
1f72387a47 Merge pull request #3385 from RichardLitt/patch-2
Nominalized 'shallow copy'
2015-03-11 16:27:26 -07:00
Richard Littauer
00e89454ec Nominalized 'shallow copy'
I mis-parsed 'shallow copies' as adjective noun, instead of as a compound verb. I've adjusted the text to make it easier to parse on the first read, which should also help ESL learners to be able to parse it easier.
2015-03-11 16:22:24 -07:00
Paul O’Shannessy
78001d3abc jsx_orphaned_brackets_transformer v1.0.1 2015-03-11 15:52:54 -07:00
Paul O’Shannessy
b459f2ff99 Merge pull request #3384 from syranide/npmjobt
Fix jsx_orphaned_brackets_transformer using jstransformer with an older esprima version
2015-03-11 15:51:38 -07:00
syranide
4485f6a439 Fix jsx_orphaned_brackets_transformer using jstransformer with an older esprima version 2015-03-11 23:48:05 +01:00
Ben Alpert
f8672c7270 Fix grammar in warning message 2015-03-11 15:47:04 -07:00
Ben Alpert
d9e06462a3 Merge pull request #3383 from ariabuckles/proptype-warnings
[PropTypes] Add warnings if PropTypes return functions
2015-03-11 15:46:17 -07:00
Aria Buckles
206e69c403 [PropTypes] Make invalid proptype warning clearer
Addresses comments on #3383, making the invalid proptype specification
warning clearer and making the tests for it a bit clearer.
2015-03-11 15:36:51 -07:00
Ben Alpert
098f316aff It\ns -> Its 2015-03-11 15:28:24 -07:00
Paul O’Shannessy
adf4aee1b4 [docs] it's --> its 2015-03-11 15:25:57 -07:00
Aria Buckles
d973e32336 [PropTypes] Add warnings if PropTypes return functions
Summary:
Right now, if a component specifies a propType as, for example,
`myProp: React.PropTypes.shape`, without an actual shape
parameter, any prop type will be accepted, because
`React.PropTypes.shape` returns a function (the actual validator),
not an Error, currently indicating that propType checking passed.

This can create an unfortunate situation where a component looks
like it has fully specified `propTypes`, but in fact does not.

This commit addresses this by warning if a propType checker returns
anything non-falsy that is not an Error (currently all the library
PropTypes return null or an Error).

Test Plan:
Added a unit test; ran `jest` in the root repo directory.
Also ran `grunt lint` and `grunt test`
2015-03-11 15:09:18 -07:00
Paul O’Shannessy
c4a2e4d414 Fix module option parsing of jsx command 2015-03-11 14:26:51 -07:00
Jay Jaeho Lee
58f6958128 Revise Korean translation - final 2015-03-12 01:57:44 +09:00
Jim
3d8b47bbcc Merge pull request #3356 from cpojer/findDOMNode
foo.getDOMNode => React.findDOMNode(foo)
2015-03-11 08:47:56 -07:00
Jinwoo Oh
dd3734094c Update Translation to 91b4564 2015-03-12 00:37:35 +09:00
Ted Kim
7dfbf73004 ref-08-reconciliation (based on 941cba6) 2015-03-12 00:37:35 +09:00
Jinwoo Oh
7dc818a95a Translate 06 to Korean
- Up to 8326a9f
2015-03-12 00:37:34 +09:00
Shim Won
f2fbb31ace Apply review
- Up to 60e96ed
2015-03-12 00:37:02 +09:00
Jinwoo Oh
2bc8a36ab9 Translate 11 to Korean
- Up to 83e4409
2015-03-12 00:37:02 +09:00
Shim Won
ec91b4184f Translate 10.1 to Korean
- Up to 678ec31
2015-03-12 00:37:02 +09:00
Seoh Char
4aeb306064 translation of 05-reusable-components-ko-KR.md 2015-03-12 00:37:02 +09:00
Shim Won
87fb9caca7 Update Translation to b95ad29 2015-03-12 00:37:01 +09:00
Shim Won
bf6d9811e7 Translate 10.2 to Korean
- Up to b7a548c
2015-03-12 00:36:50 +09:00
Jinwoo Oh
5579a86ac3 Translate 08.1 to Korean
- Up to b7a548c
2015-03-12 00:36:50 +09:00
Shim Won
c0ac76d723 Translate 10.7 to Korean
- Up to 0bf88f2
2015-03-12 00:36:50 +09:00
Shim Won
c24e5926b9 Translate 10.3 to Korean
- Up to 5ab7fde
2015-03-12 00:36:50 +09:00
Jinwoo Oh
48d2f31a6d Translate conferences to Korean
- Up to 1b86246
2015-03-12 00:36:50 +09:00
Shim Won
8838a6d9f9 Translate 10.5 to Korean
- Up to 60e96ed
2015-03-12 00:36:25 +09:00
Shim Won
74adeb3611 Translate 10.8 to Korean
- Up to ab512af
2015-03-12 00:36:25 +09:00
Shim Won
d3ad46a461 Translate 10.4 to Korean
- Up to 2e232f8
2015-03-12 00:36:25 +09:00
Jinwoo Oh
89b23c0c20 Translate 08 to Korean
- Up to b7a548c
2015-03-12 00:36:25 +09:00
Jim
5afa657d77 Merge pull request #3370 from varunrau/master
Fixed shallowEqual for arguments that are not objects
2015-03-11 08:34:49 -07:00
Shim Won
710668e7f1 Update Translation to 673874d 2015-03-12 00:33:40 +09:00
Shim Won
4ce0e00767 Unify words 2015-03-12 00:33:40 +09:00
Jay Jaeho Lee
3abeb52e6f Revise Korean translations 2015-03-12 00:33:40 +09:00
Shim Won
35293b5229 Translate 09 to Korean
- Up to 2de44cf
2015-03-12 00:33:40 +09:00
Shim Won
a04597eaa1 Translate 02.2 to Korean
- Up to fc91d2f
2015-03-12 00:33:40 +09:00
Shim Won
7e73efefd8 Fix links 2015-03-12 00:33:40 +09:00
Shim Won
fe1a2e48f9 Update think-in-react.ko-KR
- Up to 5ab7fde
2015-03-12 00:33:39 +09:00
Shim Won
f1d74bef9c Translate 10 to Korean
- Up to a911513
2015-03-12 00:33:39 +09:00
Shim Won
fe8cd0c442 Translate 02.3 to Korean
- Up to 6f44f60
2015-03-12 00:33:39 +09:00
Shim Won
84ebb42596 Update content
- Up to 5ab7fde
2015-03-12 00:33:39 +09:00
Shim Won
aae74da792 Translate 02.1 to Korean
- Up to 513433b
2015-03-12 00:33:39 +09:00
Shim Won
fb2f6c6747 Update docs to v0.13.0-beta.2
- Up to 5126cee
2015-03-12 00:33:39 +09:00
Jinwoo Oh
ac466b71d8 Translate tutorial to Korean
- Up to a19966f
2015-03-12 00:33:39 +09:00
Shim Won
547baf82b5 Translate ref 07 to Korean
- Up to 6f44f60
2015-03-12 00:33:39 +09:00
Shim Won
f7f48bda28 Translate ref 06 to Korean
- Up to 4c7cd13
2015-03-12 00:33:38 +09:00
Shim Won
65b8bcce6f Translate ref 05 to Korean
- Up to c0e33e8
2015-03-12 00:33:38 +09:00
Shim Won
ade720d4d9 Translate ref 04 to Korean
- Up to a4c96d6
2015-03-12 00:33:38 +09:00
Lee Jaeyoung
9e601b8c05 translate 10.6-update.ko-KR.md
apply comments

apply comments

apply comments
2015-03-12 00:33:38 +09:00
Shim Won
ae4fbff308 Translate 07 to Korean
- Up to bb52715
2015-03-12 00:33:38 +09:00
Shim Won
c344ef1b79 Translate flux-docs to Korean
- Up to 6c19040
2015-03-12 00:33:38 +09:00
Shim Won
7eabccc214 Translate 04 to Korean
- Up to e4352ef
2015-03-12 00:33:38 +09:00
Jinwoo Oh
8387f3bbc4 Translate getting-started to Korean
- Up to b3cd299
2015-03-12 00:33:38 +09:00
Taeho Kim
a4f9c67dbb Create ref-09-glossary.ko-KR.md 2015-03-12 00:33:38 +09:00
Taeho Kim
87d6c59ebf Create ref-03-component-specs.ko-KR.md
Based on 08c5e42649
2015-03-12 00:33:38 +09:00
Taeho Kim
8b109e54f1 Create ref-02-component-api.ko-KR.md 2015-03-12 00:33:37 +09:00
Taeho Kim
72f631b994 Create ref-01-top-level-api.ko-KR.md
Based on 4f50071de0
2015-03-12 00:33:37 +09:00
Lee Jaeyoung
cb50a48788 translate thinking-in-react.ko 2015-03-12 00:33:37 +09:00
Lee Jaeyoung
4466b0336d translate complementary-tools 2015-03-12 00:33:37 +09:00
Jay Jaeho Lee
e8fa815391 translated docs/docs/02-displaying-data.md into Korean
Up to b25e2e70d8
2015-03-12 00:33:37 +09:00
Shim Won
6686029267 Fix some words, Translate title
- Up to 9f18ccd
2015-03-12 00:33:37 +09:00
Shim Won
f0afc7809a Translate 03 to Korean
- Up to 9f18ccd
2015-03-12 00:33:37 +09:00
Lee Jaeyoung
ed1d7fc513 translate videos.md 2015-03-12 00:33:37 +09:00
Lee Jaeyoung
8cef7910a7 translate examples.md 2015-03-12 00:33:36 +09:00
Jay Jaeho Lee
4d4f322c60 Add docs/docs 01 2015-03-12 00:33:36 +09:00
Varun Rau
6cd004f20a Fixed shallowEqual implementation to handle the case when inputs are not objects.
If either argument is not an object and unequal, then shallowEqual should return false.
If only one argument is an object, then shallowEqual should return false.

Fixes #3369
2015-03-10 18:03:51 -07:00
cpojer
413e96d0cd Add some important getDOMNode tests back. 2015-03-10 17:27:19 -07:00
cpojer
ae7da3aadd foo.getDOMNode => React.findDOMNode(foo) 2015-03-10 17:17:21 -07:00
Jim
91b45641b8 Merge pull request #3317 from ianobermiller/fix-shallow-equal
shallowEqual: bail if either argument is falsey
2015-03-10 15:45:03 -07:00
Ben Alpert
53f92bf858 Fix comma splice and line length 2015-03-10 15:36:27 -07:00
Jim
645a6caaf5 Merge pull request #3323 from jonhester/ie8-compat-mode
warn if IE8 is in compatibility mode
2015-03-10 15:35:09 -07:00
Ben Alpert
462e8f1be8 Merge pull request #3327 from Simek/initialize-variables-fix
initialize dev variables in dev mode only in shouldUpdateReactComponent.js
2015-03-10 15:33:29 -07:00
Ben Alpert
cff3f35bf7 Merge pull request #3321 from Smert/master
Bringing the code to one style.
2015-03-10 15:32:43 -07:00
Ben Alpert
4d9561d938 Merge pull request #3310 from darcyadams/console-exists-before-warn
Check that console exists before warning
2015-03-10 15:32:32 -07:00
Ben Alpert
b95fe57743 Merge pull request #3253 from jsfb/fix-comment-to-reflect-class-type-usage
Fix comment to reflect the new (non-deprecated) way of accessing a class type.
2015-03-10 15:31:50 -07:00
Ben Alpert
e8af59cf82 Merge pull request #3246 from spicyj/onclick
Revert "Revert #1536"
2015-03-10 15:31:38 -07:00
Ben Alpert
68ca057bc3 Merge pull request #3230 from nmn/master
Add numeric CSS property - stroke width
2015-03-10 15:31:30 -07:00
Ben Anderson
75a8bc96b1 Warn when rendering directly into document.body
This is in response to #3207 to address concerns regarding third-party
scripts and browser plugins potentially altering DOM nodes within
document.body, causing problems with reconciliation.

Closes #3211.
2015-03-10 15:31:02 -07:00
Ben Alpert
f77de57e41 Merge pull request #2946 from benmoss/nested-render-warning
Add displayName to nested render warnings [#1726]
2015-03-10 15:24:59 -07:00
Ben Alpert
4feed4fcc5 Merge pull request #2868 from chicoxyzzy/dev_and_prod_environments_consistancy
make dev and production environment consistent
2015-03-10 15:24:33 -07:00
Ben Alpert
9cb25b3ddb Merge pull request #2266 from syranide/voidelem
ReactDOMComponent should not accept children for void elements
2015-03-10 15:24:00 -07:00
Paul O’Shannessy
715aadd1c7 v0.13 starter kit 2015-03-10 15:08:26 -07:00
Paul O’Shannessy
e313616be7 Bump version so we can get back to work 2015-03-10 15:06:35 -07:00
Paul O’Shannessy
e17b6c0514 Bump version in readme 2015-03-10 15:05:43 -07:00
cpojer
a1631bea71 Add shallowCompare module and use it in PureRenderMixin + tests 2015-03-09 18:49:37 -07:00
Bartosz Kaszubowski
a42dcf4f7b initialize dev variables in dev mode only 2015-03-05 21:20:48 +01:00
Jon Hester
65c4aeaa3a use warning module instead of console.debug 2015-03-05 18:53:12 +00:00
Darcy
6b593083ed check that console exists before warning
Console is undefined in earlier versions of IE when it is not open. This causes an uncaught exception, and breaks applications in these versions of IE when attempting to warn when the  console is closed.
Admittedly, console will usually be open when testing in development, but still React should not break the application when it is not.
2015-03-05 09:20:16 -05:00
Jon Hester
a999ac1ac3 warn if IE8 is in compatibility mode 2015-03-05 13:48:28 +00:00
dmitry
adb9b20f6d Bringing the code to one style. 2015-03-05 14:04:47 +02:00
Ian Obermiller
34f4a0e42d shallowEqual: bail if either argument is falsey
Also add some unit tests.
2015-03-04 22:16:51 -08:00
PNikray
3516f33ffd Modified the todo example.
Instead of only using the index to supress the warning it now uses the
text + index to also ensure object iteration order.
2015-03-02 19:49:42 +01:00
PNikray
9c7f9b8de5 Added the key attribute into the todo example
This is to solve the warning (that the key should be set) that was being raised when adding a new item.
2015-02-26 19:37:05 +01:00
Andreas Svensson
20dd247292 ReactDOMComponent should warn when provided children for void elements 2015-02-26 10:14:47 +01:00
Jim
29f6c7e774 Fix comment to reflect the new (non-deprecated) way of accessing a class type. 2015-02-24 11:18:17 -08:00
Ben Alpert
1943a9a0db Only call put/deleteListener with truthy listeners
Without this, transitioning from `<div onClick={null} />` to `<div />` triggered `willDeleteListener` to delete the `click` handler which caused problems; now, we only call `putListener` and `deleteListener` when we have an actual listener.

I now also clean up the `onClickListeners` map upon deletion and don't double-listen when updating the event listener.
2015-02-23 14:52:30 -08:00
Ben Alpert
090e4bbc9a Revert "Revert #1536"
Formerly "Attach empty onclick listener to each node". This reverts commit 431155d2e2.
2015-02-23 14:28:22 -08:00
Naman Goel
34d5e05199 Merge branch 'master' of https://github.com/facebook/react
* 'master' of https://github.com/facebook/react: (30 commits)
  Expose --target flag on jsx executable
  Contributing: cleanup quote style
  Add Relay blog post
  Fix long lines in vendor/fbtransform/visitors
  lint vendor/*.js
  fix .eslintignore
  remove ballmer example
  Fix a doc. cloneWithProps clones a ReactElement.
  lint from root
  Fixed mistake in jsdocs types for cloneWithProps
  Put deprecation warning for classSet
  Lint vendor/fbtransform as well
  More warnings to ReactFragment.create
  Warn when using constructor function directly
  Move option parsing into react-tools proper.
  Remove lodash devDependency
  Added the immutability talk to the React.js Conf update.
  Use same pathways for browser transforms as we use in react-tools
  lint: remove spaces from array brackets
  lint: remove spaces from object braces
  ...
2015-02-22 15:57:34 +01:00
Naman Goel
20d3f0db29 CSS property 2015-02-22 15:57:30 +01:00
chico
9185323959 make dev and production environment consistent 2015-02-22 14:58:42 +03:00
Paul Harper
a18c7549df Modify sample CSS so that it works in Safari
When animating the max-height property in Safari, entering the leave state would trigger an animation to `max-height: 0`. Then when the active state kicked in, it would jump and didn't really look right. Moving the `transition` css property to the active version fixed the issue for me and worked on Safari, Chrome and Firefox. Unfortunately I'm not in a position to test in IE at the moment, but I'll do that at my first convenience tomorrow.
2015-02-18 17:26:54 -08:00
Jim
93f6fc9eeb Allow rendering into document fragments. Fixes #840 2015-02-17 11:24:03 -08:00
Ben Alpert
6b03975395 Make Simulate.mouseEnter/Leave use direct dispatch
Fixes #1297.

onMouseEnter and onMouseLeave shouldn't *actually* use direct dispatch, but doing so is more useful than doing nothing (and I don't think it precludes adding proper enter/leave dispatching later, either).

Test Plan:
grunt test
2015-02-16 16:12:19 -08:00
Nick Williams
5bf8cda58f document checkbox using click handlers for change events
I hit an issue related to this earlier today. Feels like a short paragraph warning of potential issues would be of benefit.  Discussed with @zpao on IRC, agreed to make PR.

For more info:
* https://github.com/facebook/react/issues/3005#issuecomment-72513965
* c7e4f55eb0/src/browser/eventPlugins/ChangeEventPlugin.js (L287)
2015-02-05 22:32:23 +00:00
Ben Moss
ba55716a2d Fix warning messages wording and access of displayName 2015-02-02 18:05:31 -05:00
Ben Moss
28f50c8a78 Add displayName to nested render warnings [#1726] 2015-01-26 14:14:36 -05:00
Jason Webster
6846cce840 Add additional supported methods to event documentation
`isPropagationStopped` and `isDefaultPrevented` methods do in fact exist on `SyntheticEvent`
2014-12-05 01:19:08 -08:00
Alexander Shtuchkin
c779ad4da3 Fix ReactTransitionGroup behavior when removing several children at once
If several children complete leaving before rendering TransitionGroup,
only the last one was removed. This could easily happen if
callback in componentWillLeave is called synchronously and several items
are removed from array. The other case is when ReactCSSTransitionGroup
has transitionLeave={false} and array is also cleaned up.

The bug was happening because this.state.children was used as a base for
children removal and it wasn't updated until the render, so only the last
removal was actually happening.

Fix involves keeping the updated children state between invocations of
_handleDoneLeaving. After updating this.state and rendering,
updatedState is cleaned up and ready for subsequent array modifications.

Test case included.
2014-11-17 15:15:54 -08:00
742 changed files with 50135 additions and 35056 deletions

View File

@@ -6,6 +6,7 @@ charset = utf-8
end_of_line = lf
indent_size = 2
indent_style = space
insert_final_newline = true
max_line_length = 80
trim_trailing_whitespace = true

View File

@@ -1,21 +1,19 @@
# We can probably lint these later but not important at this point
src/vendor
# eslint uses JSX* node types to determine if using JSX. esprima-fb still uses
# XJS* nodes. When we fix that (https://github.com/facebook/esprima/pull/85) we
# can enable linting the tests and fix those errors.
src/**/__tests__/**
# This should be enabled but that folder has too much in it that doesn't belong
src/test
test/the-files-to-test.generated.js
# This is synced with a different file internally, don't want to lint it yet
vendor/fbtransform/syntax.js
vendor/jasmine/
vendor/jasmine-jsreporter/
src/shared/vendor
# But not in docs/_js/examples/*
docs/_js/*.js
docs/js/
docs/_site/
# gems
docs/vendor/bundle/
# This should be more like examples/**/thirdparty/** but
# we should fix https://github.com/facebook/esprima/pull/85 first
examples/
# Ignore built files.
build/
# react-codemod
packages/react-codemod/test/
packages/react-codemod/scripts/
packages/react-codemod/build/
packages/react-codemod/node_modules/
vendor/react-dom.js

View File

@@ -1,51 +1,63 @@
---
parser: esprima-fb
parser: babel-eslint
env:
browser: true
node: true
extends:
- ./node_modules/fbjs-scripts/eslint/.eslintrc
globals:
__DEV__: true
plugins:
- react
- react-internal
# We're stricter than the default config, mostly. We'll override a few rules and
# then enable some React specific ones.
rules:
# ERRORS
space-before-blocks: 2
indent: [2, 2, indentSwitchCase: true]
brace-style: 2
space-after-keywords: 2
strict: 2
# We actually have a transform to support this and we fix this for bundled
# releases but not for the npm package, so enforce it strictly
no-comma-dangle: 2
# Make this a warning for now. We do this in a few places so we might need to
# disable
no-unused-expressions: 2
block-scoped-var: 2
eol-last: 2
dot-notation: 2
accessor-pairs: 0
brace-style: [2, 1tbs]
comma-dangle: [2, always-multiline]
consistent-return: 2
no-unused-vars: [2, args: none]
quotes: [2, 'single']
dot-location: [2, property]
dot-notation: 2
eol-last: 2
indent: [2, 2, {SwitchCase: 1}]
jsx-quotes: [2, prefer-double]
no-bitwise: 0
no-dupe-class-members: 2
no-multi-spaces: 2
no-restricted-syntax: [2, WithStatement]
no-shadow: 2
no-unused-expressions: 2
no-unused-vars: [2, {args: none}]
quotes: [2, single, avoid-escape]
space-after-keywords: 2
space-before-blocks: 2
# TODO: enable this rule after https://github.com/eslint/eslint/pull/3768 lands
space-before-keywords: 0
strict: [2, global]
# WARNINGS
# This is the only one that's hard to track since we don't lint just changes.
max-len: [1, 80]
# JSX
# Our transforms set this automatically
react/display-name: 0
react/jsx-boolean-value: [2, always]
react/jsx-no-undef: 2
# We don't care to do this
react/jsx-sort-prop-types: 0
react/jsx-sort-props: 0
react/jsx-uses-react: 2
react/jsx-uses-vars: 2
# It's easier to test some things this way
react/no-did-mount-set-state: 0
react/no-did-update-set-state: 0
# We define multiple components in test files
react/no-multi-comp: 0
react/no-unknown-property: 2
# This isn't useful in our test code
react/prop-types: 0
react/react-in-jsx-scope: 2
react/self-closing-comp: 2
# We don't care to do this
react/sort-comp: 0
react/wrap-multilines: [2, {declaration: false, assignment: false}]
# WISHLIST. One day...
# We'll need a custom version of this that does a subset of the whole rule.
# Otherwise this is just too noisy.
# valid-jsdoc: 1
# DISABLED. These aren't compatible with our style
# We use this for private/internal variables
no-underscore-dangle: 0
# We pass constructors around / access them from members
new-cap: 0
# We do this a lot.
no-use-before-define: 0
# We do this in a few places to align values
key-spacing: 0
# DISABLED. These currently cause errors when running.
no-multi-spaces: 0
# CUSTOM RULES
# the second argument of warning/invariant should be a literal string
react-internal/warning-and-invariant-args: 2

4
.gitignore vendored
View File

@@ -20,3 +20,7 @@ examples/shared/*.js
test/the-files-to-test.generated.js
*.log*
chrome-user-data
*.sublime-project
*.sublime-workspace
.idea
*.iml

View File

@@ -1,10 +1,20 @@
Adam Timberlake <adam.timberlake@gmail.com>
Alex Mykyta <dancingwithcows@gmail.com>
Alex Pien <alexpien@gmail.com>
Alex Pien <alexpien@gmail.com> <pien@pien-mbp.dhcp.thefacebook.com>
Alex Pien <alexpien@gmail.com> <pien@pien-mbp.local>
Andreas Savvides <asavvides@twitter.com> <AnSavvides@users.noreply.github.com>
Andreas Savvides <asavvides@twitter.com> <andreas@nibbli.com>
Andreas Svensson <andreas@syranide.com>
Andres Suarez <zertosh@gmail.com>
Andrew Sokolov <asokolov@atlassian.com>
Baraa Hamodi <bhamodi@uwaterloo.ca> <baraa@optimizely.com>
Ben Alpert <ben@benalpert.com> <balpert@fb.com>
Ben Alpert <ben@benalpert.com> <spicyjalapeno@gmail.com>
Ben Newman <bn@cs.stanford.edu> <benjamn@fb.com>
Benjamin Woodruff <github@benjam.info> <bgw@fb.com>
Bill Fisher <fisherwebdev@gmail.com>
Blaine Kasten <blainekasten@gmail.com>
Brandon Tilley <brandon@brandontilley.com>
Cheng Lou <chenglou92@gmail.com> <chenglou@fb.com>
Christian Oliff <christianoliff@yahoo.com>
@@ -15,6 +25,8 @@ Dan Schafer <dschafer@fb.com>
Daniel Gasienica <daniel@gasienica.ch> <daniel@fiftythree.com>
Daniel Gasienica <daniel@gasienica.ch> <dgasienica@zynga.com>
Daniel Lo Nigro <daniel@dan.cx> <danlo@fb.com>
Dmitry Blues <dmitri.blyus@gmail.com>
Erik Harper <eharper@mixpo.com>
Evan Coonrod <evan@paloalto.com>
Fabio M. Costa <fabiomcosta@gmail.com> <fabs@fb.com>
Felix Kling <felix.kling@gmx.net> <fkling@fb.com>
@@ -22,41 +34,63 @@ François-Xavier Bois <fxbois@gmail.com>
Gabe Levi <gabelevi@gmail.com> <glevi@fb.com>
Geert Pasteels <geert.pasteels@gmail.com>
George A Sisco III <george.sisco@gmail.com>
Georgii Dolzhykov <thorn.mailbox@gmail.com>
Harry Hull <harry.hull1@gmail.com>
Hendrik Swanepoel <hendrik.swanepoel@gmail.com>
Ian Obermiller <ian@obermillers.com> <iano@fb.com>
Ilyá Belsky <gelias.gbelsky@gmail.com>
Ingvar Stepanyan <me@rreverser.com> <rreverser@ubuntu.rreverser.a4.internal.cloudapp.net>
Irae Carvalho <irae@irae.pro.br>
Ivan Vergiliev <ivan.vergiliev@gmail.com>
Jae Hun Ro <jhr24@duke.edu>
Jaime Mingo <j.mingov@3boll.com>
James Brantly <james@jbrantly.com>
Jan Hancic <jan.hancic@gmail.com> <jan.hancic@caplin.com>
Jan Kassens <jan@kassens.net> <jkassens@fb.com>
Jason Bonta <jbonta@gmail.com> <jasonbonta@fb.com>
Jason Trill <jason@jasontrill.com>
Jeff Chan <jefftchan@gmail.com> <jeff@quizlet.com>
Jeff Morrison <jeff@anafx.com> <Jeff@anafx.com>
Jeff Morrison <jeff@anafx.com> <jeffmo@fb.com>
Jeff Morrison <jeff@anafx.com> <lbljeffmo@gmail.com>
Jeffrey Lin <lin.jeffrey@gmail.com> <jeffreylin@fb.com>
Jim Sproch <jsproch@fb.com>
Jim Sproch <jsproch@fb.com> <jsfb@github>
Jiyeon Seo <zzzeons@gmail.com>
Jon Chester <jonchester@fb.com>
Jon Madison <jon@tfftech.com>
Jonathan Hsu <jhiswin@gmail.com>
Jordan Walke <jordojw@gmail.com>
Jordan Walke <jordojw@gmail.com> <jordanjcw@fb.com>
Joseph Savona <joesavona@fb.com> <josephsavona@users.noreply.github.com>
Josh Duck <josh@fb.com> <github@joshduck.com>
Juan Serrano <germ13@users.noreply.github.com>
Jun Wu <quark@lihdd.net>
Justin Robison <jrobison151@gmail.com>
Keito Uchiyama <projects@keito.me> <keito@fb.com>
Kevin Coughlin <kevintcoughlin@gmail.com> <kevincoughlin@tumblr.com>
Kunal Mehta <k.mehta@berkeley.edu> <kunalm@fb.com>
Laurence Rowe <l@lrowe.co.uk> <laurence@lrowe.co.uk>
Marcin K. <katzoo@github.mail>
Mark Anderson <undernewmanagement@users.noreply.github.com>
Martin Andert <mandert@gmail.com>
Mathieu M-Gosselin <mathieumg@gmail.com> <mathieumg@atx33.com>
Matsunoki <himkt@klis.tsukuba.ac.jp>
Matt Brookes <matt@brookes.net>
Matt Dunn-Rankin <mdunnrankin@gmail.com> <matchu1993@gmail.com>
Matt Zabriskie <mzabriskie@gmail.com>
Matthew Johnston <matthewjohnston4@outlook.com> <matthewjohnston4@users.noreply.github.com>
Max Heiber <max.heiber@gmail.com>
Michal Srb <xixixao@seznam.cz> xixixao <xixixao@seznam.cz>
Michelle Todd <himichelletodd@gmail.com> <michelle@khanacademy.org>
Mihai Parparita <mihai.parparita@gmail.com> <mihai@persistent.info>
Minwe LUO <minwe@yunshipei.com>
Murray M. Moss <murray@mmoss.name> <MMoss@cainc.com>
Murray M. Moss <murray@mmoss.name> <mmoss@users.noreply.github.com>
Neri Marschik <marschik_neri@cyberagent.co.jp>
Nick Gavalas <njg57@cornell.edu>
Nick Thompson <ncthom91@gmail.com> <nickt@instagram.com>
Patrick Stapleton <github@gdi2290.com>
Paul OShannessy <paul@oshannessy.com> <poshannessy@fb.com>
Paul Shen <paul@mnml0.com> <paulshen@fb.com>
Pete Hunt <floydophone@gmail.com>
@@ -76,14 +110,18 @@ Scott Feeney <scott@oceanbase.org> <smf@fb.com>
Sebastian Markbåge <sebastian@calyptus.eu> <sema@fb.com>
Sergey Rubanov <chi187@gmail.com>
Steven Luscher <react@steveluscher.com> <github@steveluscher.com>
Steven Luscher <react@steveluscher.com> <steveluscher@fb.com>
Steven Luscher <react@steveluscher.com> <steveluscher@instagram.com>
Steven Luscher <react@steveluscher.com> <steveluscher@users.noreply.github.com>
Stoyan Stefanov <ssttoo@ymail.com>
Thomas Aylott <oblivious@subtlegradient.com> <aylott@fb.com>
Timothy Yung <yungsters@gmail.com> <yungsters@fb.com>
Vasiliy Loginevskiy <Yeti.or@gmail.com>
Vasiliy Loginevskiy <Yeti.or@gmail.com> <yeti-or@yandex-team.ru>
Vjeux <vjeuxx@gmail.com>
Vjeux <vjeuxx@gmail.com> <vjeux@fb.com>
Volkan Unsal <spocksplanet@gmail.com>
Xavier Morel <xmo-odoo@users.noreply.github.com>
YouBao Nong <noyobo@gmail.com> <nongyoubao@alibaba-inc.com>
Zach Bruggeman <mail@bruggie.com> <zbruggeman@me.com>
张敏 <cookfront@gmail.com>

View File

@@ -1,7 +1,7 @@
---
language: node_js
node_js:
- '0.10'
- 4
sudo: false
cache:
directories:
@@ -15,6 +15,8 @@ before_install:
echo "Only docs were updated, stopping build process."
exit
fi
npm install -g npm@latest-2
npm --version
script:
- |
if [ "$TEST_TYPE" = build_website ]; then
@@ -41,35 +43,35 @@ script:
fi
popd
fi
elif [ "$TEST_TYPE" = build ]; then
if [ "$SERVER" ]; then
set -e
./node_modules/.bin/grunt build
curl \
-F "react=@build/react.js" \
-F "react.min=@build/react.min.js" \
-F "react-with-addons=@build/react-with-addons.js" \
-F "react-with-addons.min=@build/react-with-addons.min.js" \
-F "react-dom=@build/react-dom.js" \
-F "react-dom.min=@build/react-dom.min.js" \
-F "npm-react=@build/packages/react.tgz" \
-F "npm-react-dom=@build/packages/react-dom.tgz" \
-F "commit=$TRAVIS_COMMIT" \
-F "date=`git log --format='%ct' -1`" \
-F "pull_request=$TRAVIS_PULL_REQUEST" \
-F "token=$SECRET_TOKEN" \
-F "branch=$TRAVIS_BRANCH" \
$SERVER
fi
else
grunt $TEST_TYPE
fi
after_script:
- |
if [ "$TEST_TYPE" = test ] && [ "$SERVER" ]; then
grunt build
curl \
-F "react=@build/react.js" \
-F "react.min=@build/react.min.js" \
-F "transformer=@build/JSXTransformer.js" \
-F "react-with-addons=@build/react-with-addons.js" \
-F "react-with-addons.min=@build/react-with-addons.min.js" \
-F "npm-react=@build/react.tgz" \
-F "npm-react-tools=@build/react-tools.tgz" \
-F "commit=$TRAVIS_COMMIT" \
-F "date=`git log --format='%ct' -1`" \
-F "pull_request=$TRAVIS_PULL_REQUEST" \
-F "token=$SECRET_TOKEN" \
-F "branch=$TRAVIS_BRANCH" \
$SERVER
./node_modules/.bin/grunt $TEST_TYPE
fi
env:
matrix:
- TEST_TYPE=test
- TEST_TYPE=build
- TEST_TYPE=jest
- TEST_TYPE=lint
- TEST_TYPE=build_website
- TEST_TYPE=test:webdriver:saucelabs:modern
global:
# SERVER
- secure: qPvsJ46XzGrdIuPA70b55xQNGF8jcK7N1LN5CCQYYocXLa+fBrl+fTE77QvehOPhqwJXcj6kOxI+sY0KrVwV7gmq2XY2HZGWUSCxTN0SZlNIzqPA80Y7G/yOjA4PUt8LKgP+8tptyhTAY56qf+hgW8BoLiKOdztYF2p+3zXOLuA=
@@ -79,16 +81,6 @@ env:
- secure: EHCyCSKMwKlLHNtcj9nmkRzmiiPE3aDGlPcnEyrDJeRI0SeN/iCXHXfFivR0vFq3vr+9naMBczAR2AEidtps5KbJrKqdZnjPFRbmfVtzWr/LlvVCub3u13Pub6TdKIVBTny1PuZ5X8GvdxMNVig89jGjvzhhWuQRaz3VhJnTra4=
matrix:
fast_finish: true
allow_failures:
- env: TEST_TYPE=test:coverage
- env: TEST_TYPE=perf:full
- env: TEST_TYPE=test:webdriver:saucelabs:modern
- env: TEST_TYPE=test:webdriver:saucelabs BROWSER_NAME=ie11
- env: TEST_TYPE=test:webdriver:saucelabs BROWSER_NAME=ie10
- env: TEST_TYPE=test:webdriver:saucelabs BROWSER_NAME=ie9
- env: TEST_TYPE=test:webdriver:saucelabs BROWSER_NAME=ie8
- env: TEST_TYPE=test:webdriver:saucelabs:ios
- env: TEST_TYPE=test:webdriver:saucelabs BROWSER_NAME=safari
notifications:
irc:
use_notice: true

214
AUTHORS
View File

@@ -1,43 +1,74 @@
839 <8398a7@gmail.com>
Aaron Franks <aaron.franks@gmail.com>
Aaron Gelter <aaron.gelter@harman.com>
Adam Krebs <amk528@cs.nyu.edu>
Adam Mark <adammark75@gmail.com>
Adam Solove <asolove@gmail.com>
Adam Timberlake <adam.timberlake@gmail.com>
Adam Zapletal <adamzap@gmail.com>
Ahmad Wali Sidiqi <wali-s@users.noreply.github.com>
Alan Souza <alansouzati@gmail.com>
Alan deLevie <adelevie@gmail.com>
Alastair Hole <afhole@gmail.com>
Alex <ultrafez@users.noreply.github.com>
Alex Boyd <alex@opengroove.org>
Alex Lopatin <alex@alexlopatin.com>
Alex Mykyta <dancingwithcows@gmail.com>
Alex Pien <alexpien@gmail.com>
Alex Smith <iqwz@ya.ru>
Alex Zelenskiy <azelenskiy@fb.com>
Alexander Shtuchkin <ashtuchkin@gmail.com>
Alexander Solovyov <alexander@solovyov.net>
Alexander Tseung <alextsg@gmail.com>
Alexandre Gaudencio <shahor@shahor.fr>
Alexey Raspopov <avenger7x13@gmail.com>
Alexey Shamrin <shamrin@gmail.com>
Andre Z Sanchez <andrezacsanchez@gmail.com>
Andreas Savvides <asavvides@twitter.com>
Andreas Svensson <andreas@syranide.com>
Andres Kalle <mjomble@gmail.com>
Andres Suarez <zertosh@gmail.com>
Andrew Cobby <cobbweb@users.noreply.github.com>
Andrew Davey <andrew@equin.co.uk>
Andrew Rasmussen <andras@fb.com>
Andrew Sokolov <asokolov@atlassian.com>
Andrew Zich <azich@fb.com>
Andrey Popp <8mayday@gmail.com>
Anthony van der Hoorn <anthony.vanderhoorn@gmail.com>
Antonio Ruberto <anto.ruberto@gmail.com>
Antti Ahti <antti.ahti@gmail.com>
Anuj Tomar <ankuto@gmail.com>
AoDev <AoDev@users.noreply.github.com>
Areeb Malik <areeb.malik91@gmail.com>
Aria Buckles <aria@khanacademy.org>
Aria Stewart <aredridel@dinhe.net>
Arian Faurtosh <arian@icloud.com>
Artem Nezvigin <artem@artnez.com>
Austin Wright <aaa@bzfx.net>
Ayman Osman <aymano.osman@gmail.com>
Baraa Hamodi <bhamodi@uwaterloo.ca>
Bartosz Kaszubowski <gosimek@gmail.com>
Basarat Ali Syed <basaratali@gmail.com>
Battaile Fauber <battaile@gmail.com>
Beau Smith <beau@beausmith.com>
Ben Alpert <ben@benalpert.com>
Ben Anderson <banderson@constantcontact.com>
Ben Foxall <benfoxall@gmail.com>
Ben Jaffe <jaffe.ben@gmail.com>
Ben Moss <ben@mossity.com>
Ben Newman <bn@cs.stanford.edu>
Ben Ripkens <bripkens.dev@gmail.com>
Benjamin Keen <ben.keen@gmail.com>
Benjamin Leiken <benleiken@gmail.com>
Benjamin Woodruff <github@benjam.info>
Bill Fisher <fisherwebdev@gmail.com>
Blaine Hatab <jbhatab@gmail.com>
Blaine Kasten <blainekasten@gmail.com>
Bob Eagan <bob@synapsestudios.com>
Bob Ralian <bob.ralian@gmail.com>
Bob Renwick <bob.renwick@gmail.com>
Bojan Mihelac <bmihelac@mihelac.org>
Bradley Spaulding <brad.spaulding@gmail.com>
Brandon Bloom <brandon@brandonbloom.name>
Brandon Tilley <brandon@brandontilley.com>
Brian Cooke <bri@bricooke.com>
@@ -50,103 +81,166 @@ Brian Rue <brian@rollbar.com>
Bruno Škvorc <bruno@skvorc.me>
Cam Song <neosoyn@gmail.com>
Cam Spiers <camspiers@gmail.com>
Carter Chung <carterchung@users.noreply.github.com>
Cassus Adam Banko <banko.adam@gmail.com>
Cat Chen <catchen@fb.com>
Cedric Sohrauer <cedric.sohrauer@infopark.de>
Charles Marsh <charlie@khanacademy.org>
Chase Adams <realchaseadams@gmail.com>
Cheng Lou <chenglou92@gmail.com>
Chitharanjan Das <das.chitharanjan@gmail.com>
Chris Grovers <chrisgrovers@users.noreply.github.com>
Chris Ha <chriskevinha@gmail.com>
Chris Rebert <github@rebertia.com>
Chris Sciolla <csciolla1@gmail.com>
Christian <christianoliff@yahoo.com>
Christian Alfoni <christianalfoni@gmail.com>
Christian Oliff <christianoliff@yahoo.com>
Christian Roman <chroman16@gmail.com>
Christoph Pojer <christoph.pojer@gmail.com>
Christopher Monsanto <chris@monsan.to>
Clay Allsopp <clay.allsopp@gmail.com>
Connor McSheffrey <c@conr.me>
Cory House <housecor@gmail.com>
Cotton Hou <himcotton@gmail.com>
Cristovao Verstraeten <cristovao@apleasantview.com>
Damien Pellier <dpellier@leadformance.com>
Dan Abramov <dan.abramov@gmail.com>
Dan Fox <iamdanfox@gmail.com>
Dan Schafer <dschafer@fb.com>
Daniel Carlsson <daniel.carlsson.1987@gmail.com>
Daniel Cousens <dcousens@users.noreply.github.com>
Daniel Friesen <daniel@nadir-seen-fire.com>
Daniel Gasienica <daniel@gasienica.ch>
Daniel Hejl <hejldaniel@gmail.com>
Daniel Lo Nigro <daniel@dan.cx>
Daniel Mané <danmane@gmail.com>
Daniel Miladinov <dmiladinov@wingspan.com>
Daniel Rodgers-Pryor <djrodgerspryor@gmail.com>
Daniel Schonfeld <daniel@schonfeld.org>
Danny Ben-David <dannybd@fb.com>
Darcy <smadad@me.com>
Daryl Lau <daryl@weak.io>
Darío Javier Cravero <dario@uxtemple.com>
David Baker <djbaker2@gmail.com>
David Goldberg <gberg1@users.noreply.github.com>
David Greenspan <dgreenspan@alum.mit.edu>
David Hellsing <david@aino.se>
David Hu <davidhu91@gmail.com>
David Mininger <dmininger@gmail.com>
David Neubauer <davidneub@gmail.com>
David Percy <davetp425@gmail.com>
Denis Sokolov <denis@sokolov.cc>
Dennis Johnson <djohnson@rallydev.com>
Devon Blandin <dblandin@gmail.com>
Devon Harvey <devonharvey@gmail.com>
Dmitrii Abramov <dmitrii@rheia.us>
Dmitry Blues <dmitri.blyus@gmail.com>
Dmitry Mazuro <dmitry.mazuro@icloud.com>
Domenico Matteo <matteo.domenico@gmail.com>
Don Abrams <donabrams@gmail.com>
Dustan Kasten <dustan.kasten@gmail.com>
Dustin Getz <dgetz@wingspan.com>
Dylan Harrington <dylanharrington@gmail.com>
Eduardo Garcia <emumaniacx@gmail.com>
Edvin Erikson <edvin@rocketblast.com>
Elaine Fang <elainefang@Elaines-MacBook-Pro.local>
Enguerran <engcolson@gmail.com>
Eric Clemmons <eric@smarterspam.com>
Eric Eastwood <contact@ericeastwood.com>
Eric Florenzano <floguy@gmail.com>
Eric O'Connell <eric.oconnell@idealist.org>
Eric Schoffstall <contra@wearefractal.com>
Erik Harper <eharper@mixpo.com>
Espen Hovlandsdal <rexxars@gmail.com>
Evan Coonrod <evan@paloalto.com>
Fabio M. Costa <fabiomcosta@gmail.com>
Federico Rampazzo <frampone@gmail.com>
Felipe Oliveira Carvalho <felipekde@gmail.com>
Felix Gnass <fgnass@gmail.com>
Felix Kling <felix.kling@gmx.net>
Fernando Correia <fernando@servicero.com>
Frankie Bagnardi <f.bagnardi@gmail.com>
François-Xavier Bois <fxbois@gmail.com>
Fred Zhao <fredz@fb.com>
G Scott Olson <gscottolson@gmail.com>
G. Kay Lee <balancetraveller+github@gmail.com>
Gabe Levi <gabelevi@gmail.com>
Gareth Nicholson <gareth.nic@gmail.com>
Garren Smith <garren.smith@gmail.com>
Geert Pasteels <geert.pasteels@gmail.com>
Geert-Jan Brits <gbrits@gmail.com>
George A Sisco III <george.sisco@gmail.com>
Georgii Dolzhykov <thorn.mailbox@gmail.com>
Gilbert <gilbertbgarza@gmail.com>
Glen Mailer <glenjamin@gmail.com>
Grant Timmerman <granttimmerman@gmail.com>
Greg Hurrell <glh@fb.com>
Greg Perkins <gregrperkins@fb.com>
Greg Roodt <groodt@gmail.com>
Gregory <g.marcilhacy@gmail.com>
Guangqiang Dong <gqdong@fb.com>
Guido Bouman <m@guido.vc>
Harry Hull <harry.hull1@gmail.com>
Harry Marr <harry.marr@gmail.com>
Harry Moreno <morenoh149@gmail.com>
Harshad Sabne <harshadsabne@users.noreply.github.com>
Hekar Khani <hekark@gmail.com>
Hendrik Swanepoel <hendrik.swanepoel@gmail.com>
Henrik Nyh <henrik@nyh.se>
Henry Zhu <hi@henryzoo.com>
Hou Chia <kchia87@gmail.com>
Hugo Jobling <me@thisishugo.com>
Héliton Nordt <hnordt@hnordt.com>
Ian Obermiller <ian@obermillers.com>
Ignacio Carbajo <icarbajop@gmail.com>
Igor Scekic <igorscekic2@gmail.com>
Ilya Shuklin <ilya.shuklin@gmail.com>
Ilyá Belsky <gelias.gbelsky@gmail.com>
Ingvar Stepanyan <me@rreverser.com>
Irae Carvalho <irae@irae.pro.br>
Isaac Salier-Hellendag <isaac@fb.com>
Ivan Kozik <ivan@ludios.org>
Ivan Krechetov <ikr@ikr.su>
Ivan Vergiliev <ivan.vergiliev@gmail.com>
J. Andrew Brassington <jabbrass@zoho.com>
J. Renée Beach <splendidnoise@gmail.com>
JD Isaacks <jd@jisaacks.com>
JW <JW00000@gmail.com>
Jack Zhang <jzhang31191@gmail.com>
Jacob Gable <jacob.gable@gmail.com>
Jacob Greenleaf <jake@imgur.com>
Jae Hun Ro <jhr24@duke.edu>
Jaime Mingo <j.mingov@3boll.com>
Jakub Malinowski <jakubmal@gmail.com>
James <james@mystrata.com>
James Brantly <james@jbrantly.com>
James Burnett <jtburnett@tribune.com>
James Ide <ide@fb.com>
James Long <longster@gmail.com>
James Pearce <jpearce@fb.com>
James Seppi <james.seppi@gmail.com>
James South <james_south@hotmail.com>
Jamie Wong <jamie.lf.wong@gmail.com>
Jamis Charles <jacharles@paypal.com>
Jamison Dance <jergason@gmail.com>
Jan Hancic <jan.hancic@gmail.com>
Jan Kassens <jan@kassens.net>
Jan Raasch <jan@janraasch.com>
Jared Forsyth <jared@jaredforsyth.com>
Jason <usaman2010us@gmail.com>
Jason Bonta <jbonta@gmail.com>
Jason Ly <jason.ly@gmail.com>
Jason Miller <aidenn0@geocities.com>
Jason Quense <monastic.panic@gmail.com>
Jason Trill <jason@jasontrill.com>
Jason Webster <jason@metalabdesign.com>
Jay Jaeho Lee <jay@spoqa.com>
Jean Lauliac <lauliacj@gmail.com>
Jed Watson <jed.watson@me.com>
Jeff Barczewski <jeff.barczewski@gmail.com>
Jeff Carpenter <gcarpenterv@gmail.com>
Jeff Chan <jefftchan@gmail.com>
Jeff Hicken <jhicken@gmail.com>
Jeff Kolesky <github@kolesky.com>
Jeff Morrison <jeff@anafx.com>
Jeff Welch <whatthejeff@gmail.com>
@@ -157,50 +251,81 @@ Jim OBrien <jimobrien930@gmail.com>
Jim Sproch <jsproch@fb.com>
Jimmy Jea <jimjea@gmail.com>
Jing Chen <jingc@fb.com>
Jinwoo Oh <arkist@gmail.com>
Jiyeon Seo <zzzeons@gmail.com>
Joe Stein <joeaarons@gmail.com>
Joel Auterson <joel.auterson@googlemail.com>
Johannes Baiter <johannes.baiter@gmail.com>
Johannes Emerich <johannes@emerich.de>
Johannes Lumpe <johannes@johanneslumpe.de>
John Heroy <johnheroy@users.noreply.github.com>
John Watson <jwatson@fb.com>
Jon Beebe <jon.beebe@daveramsey.com>
Jon Chester <jonchester@fb.com>
Jon Hester <jon.d.hester@gmail.com>
Jon Madison <jon@tfftech.com>
Jon Scott Clark <jonscottclark@gmail.com>
Jon Tewksbury <jontewks@gmail.com>
Jonas Enlund <jonas.enlund@gmail.com>
Jonas Gebhardt <jonas@instagram.com>
Jonathan Hsu <jhiswin@gmail.com>
Jordan Harband <ljharb@gmail.com>
Jordan Walke <jordojw@gmail.com>
Jorrit Schippers <jorrit@ncode.nl>
Joseph Nudell <joenudell@gmail.com>
Joseph Savona <joesavona@fb.com>
Josh Bassett <josh.bassett@gmail.com>
Josh Duck <josh@fb.com>
Josh Yudaken <yud@instagram.com>
Joshua Go <joshuago@gmail.com>
Joshua Goldberg <jsgoldberg90@gmail.com>
Joshua Ma <me@joshma.com>
João Valente <filipevalente@gmail.com>
Juan Serrano <germ13@users.noreply.github.com>
Julen Ruiz Aizpuru <julenx@gmail.com>
Julian Viereck <julian.viereck@gmail.com>
Julien Bordellier <git@julienbordellier.com>
Jun Wu <quark@lihdd.net>
Juraj Dudak <jdudak@fb.com>
Justin Jaffray <justinjaffray@khanacademy.org>
Justin Robison <jrobison151@gmail.com>
Justin Woo <moomoowoo@gmail.com>
Kamron Batman <kamronbatman@users.noreply.github.com>
Karl Mikkelsen <karl@kingkarl.com>
Karpich Dmitry <karpich@gollard.ru>
Keito Uchiyama <projects@keito.me>
Kevin Coughlin <kevintcoughlin@gmail.com>
Kevin Huang <huang.kev@gmail.com>
Kevin Old <kevin@kevinold.com>
KimCoding <jeokrang@hanmail.net>
Kirk Steven Hansen <hanski07@kirk-hansens-macbook.local>
Kit Randel <kit@nocturne.net.nz>
Kohei TAKATA <kt.koheitakata@gmail.com>
Koo Youngmin <youngmin@youngminz.kr>
Kunal Mehta <k.mehta@berkeley.edu>
Kurt Ruppel <me@kurtruppel.com>
Kyle Kelley <rgbkrk@gmail.com>
Kyle Mathews <mathews.kyle@gmail.com>
Laurence Rowe <l@lrowe.co.uk>
Laurent Etiemble <laurent.etiemble@monobjc.net>
Lee Byron <lee@leebyron.com>
Lee Jaeyoung <jaeyoung@monodiary.net>
Lei <tendant@gmail.com>
Leon Fedotov <LeonFedotov@users.noreply.github.com>
Leon Yip <lyip1992@users.noreply.github.com>
Leonardo YongUk Kim <dalinaum@gmail.com>
Levi Buzolic <levibuzolic@gmail.com>
Levi McCallum <levi@levimccallum.com>
Lily <qvang.j@gmail.com>
Logan Allen <loganfynne@gmail.com>
Luigy Leon <luichi.19@gmail.com>
Luke Horvat <lukehorvat@gmail.com>
MIKAMI Yoshiyuki <yoshuki@saikyoline.jp>
Marcin K. <katzoo@github.mail>
Marcin Kwiatkowski <marcin.kwiatkowski@hotmail.com>
Marcin Szczepanski <marcins@gmail.com>
Mariano Desanze <protronm@gmail.com>
Marjan <marjan.georgiev@gmail.com>
Mark Anderson <undernewmanagement@users.noreply.github.com>
Mark Funk <mark@boomtownroi.com>
Mark Hintz <markohintz@gmail.com>
@@ -211,28 +336,49 @@ Marshall Roch <mroch@fb.com>
Martin Andert <mandert@gmail.com>
Martin Jul <martin@mjul.com>
Martin Konicek <mkonicek@fb.com>
Martin Mihaylov <martomi@users.noreply.github.com>
Masaki KOBAYASHI <makky.4d6b.3f5@gmail.com>
Mathieu M-Gosselin <mathieumg@gmail.com>
Matias Singers <mail@matiassingers.com>
Matsunoki <himkt@klis.tsukuba.ac.jp>
Matt Brookes <matt@brookes.net>
Matt Dunn-Rankin <mdunnrankin@gmail.com>
Matt Harrison <mt.harrison86@gmail.com>
Matt Huggins <matt.huggins@gmail.com>
Matt Zabriskie <mzabriskie@gmail.com>
Matthew Dapena-Tretter <m@tthewwithanm.com>
Matthew Johnston <matthewjohnston4@users.noreply.github.com>
Matthew Johnston <matthewjohnston4@outlook.com>
Matthew King <mking@users.noreply.github.com>
Matthew Miner <matthew@matthewminer.com>
Matthias Le Brun <mlbli@me.com>
Matti Nelimarkka <matti.nelimarkka@hiit.fi>
Max F. Albrecht <1@178.is>
Max Heiber <max.heiber@gmail.com>
Maxi Ferreira <charca@gmail.com>
Maxim Abramchuk <MaximAbramchuck@gmail.com>
Merrick Christensen <merrick.christensen@gmail.com>
Mert Kahyaoğlu <mertkahyaoglu93@gmail.com>
Michael Chan <mijoch@gmail.com>
Michael Randers-Pehrson <michael.rp@gmail.com>
Michael Ridgway <mridgway@yahoo-inc.com>
Michael Warner <MichaelJWarner@hotmail.com>
Michal Srb <xixixao@seznam.cz>
Michelle Todd <himichelletodd@gmail.com>
Mihai Parparita <mihai.parparita@gmail.com>
Mike D Pilsbury <mike.pilsbury@gmail.com>
Mike Groseclose <mike.groseclose@gmail.com>
Mikolaj Dadela <mikolaj.dadela@hgv-online.de>
Minwe LUO <minwe@yunshipei.com>
Miorel Palii <miorel@fb.com>
Morhaus <alexandre.kirszenberg@gmail.com>
Mouad Debbar <mdebbar@fb.com>
Murad <rogozhnikoff@users.noreply.github.com>
Murray M. Moss <murray@mmoss.name>
Nadeesha Cabral <nadeesha.cabral@gmail.com>
Naman Goel <naman34@gmail.com>
Nate Hunzaker <nate.hunzaker@gmail.com>
Nathan White <nw@nwhite.net>
Neri Marschik <marschik_neri@cyberagent.co.jp>
Nicholas Bergson-Shilcock <me@nicholasbs.net>
Nick Fitzgerald <fitzgen@gmail.com>
Nick Gavalas <njg57@cornell.edu>
@@ -241,14 +387,20 @@ Nick Raienko <enaqxx@gmail.com>
Nick Thompson <ncthom91@gmail.com>
Nick Williams <WickyNilliams@users.noreply.github.com>
Niklas Boström <nbostrom@gmail.com>
Ning Xia <ning-github@users.noreply.github.com>
Niole Nelson <niolenelson@gmail.com>
Oiva Eskola <oiva.eskola@gmail.com>
Oleg <o.yanchinskiy@gmail.com>
Oleksii Markhovskyi <olexiy.markhovsky@gmail.com>
Oliver Zeigermann <oliver.zeigermann@gmail.com>
Olivier Tassinari <Olivier.tassinari@gmail.com>
Owen Coutts <owenc@fb.com>
Pablo Lacerda de Miranda <pablolm@yahoo-inc.com>
Paolo Moretti <moretti@users.noreply.github.com>
Pascal Hartig <passy@twitter.com>
Patrick Laughlin <patrick@laughl.info>
Patrick Stapleton <github@gdi2290.com>
Paul Harper <benekastah@gmail.com>
Paul OShannessy <paul@oshannessy.com>
Paul Seiffert <paul.seiffert@gmail.com>
Paul Shen <paul@mnml0.com>
@@ -261,6 +413,7 @@ Petri Lehtinen <petri@digip.org>
Petri Lievonen <plievone@cc.hut.fi>
Pieter Vanderwerff <me@pieter.io>
Pouja Nikray <poujanik@gmail.com>
Prathamesh Sonpatki <csonpatki@gmail.com>
Preston Parry <ClimbsRocks@users.noreply.github.com>
Rafael <rafael.garcia@clever.com>
Rafal Dittwald <rafal.dittwald@gmail.com>
@@ -268,76 +421,131 @@ Rajiv Tirumalareddy <rajivtreddy@gmail.com>
Randall Randall <randall@randallsquared.com>
Ray <ray@tomo.im>
Raymond Ha <raymond@shraymonks.com>
Reed Loden <reed@reedloden.com>
Richard D. Worth <rdworth@gmail.com>
Richard Feldman <richard.t.feldman@gmail.com>
Richard Kho <hello@richardkho.com>
Richard Littauer <richard.littauer@gmail.com>
Richard Livesey <Livesey7@hotmail.co.uk>
Richard Wood <rwoodnz@gmail.com>
Rick Beerendonk <rick@beerendonk.com>
Riley Tomasek <riley.tomasek@gmail.com>
Rob Arnold <robarnold@cs.cmu.edu>
Robert Knight <robert.knight@mendeley.com>
Robert Sedovsek <robert.sedovsek@gmail.com>
Robin Berjon <robin@berjon.com>
Roman Vanesyan <roman.vanesyan@gmail.com>
Russ <russwirtz@gmail.com>
Ryan Seddon <seddon.ryan@gmail.com>
Sahat Yalkabov <sakhat@gmail.com>
Saif Hakim <saif@benchling.com>
Sam Saccone <samccone@gmail.com>
Sam Selikoff <sam.selikoff@gmail.com>
Samy Al Zahrani <samy@sadeem.net>
Sander Spies <sandermail@gmail.com>
Scott Burch <scott@bulldoginfo.com>
Scott Feeney <scott@oceanbase.org>
Sean Kinsey <oyvind@fb.com>
Sebastian Markbåge <sebastian@calyptus.eu>
Seoh Char <devthewild@gmail.com>
Serg <undrdog@yandex.ru>
Sergey Generalov <sergey@genbit.ru>
Sergey Rubanov <chi187@gmail.com>
Seyi Adebajo <hello@seyinanigans.com>
Shane O'Sullivan <shaneosullivan1@gmail.com>
Shaun Trennery <shaun.trennery@gmail.com>
Sheraz <undernewmanagement@users.noreply.github.com>
ShihChi Huang <hhuang@netflix.com>
Shim Won <marocchino@gmail.com>
Shota Kubota <kubosho@users.noreply.github.com>
Shripad K <assortmentofsorts@gmail.com>
Sibi <psibi2000@gmail.com>
Simon Højberg <r.hackr@gmail.com>
Simon Welsh <simon@simon.geek.nz>
Sophia Westwood <sophia@quip.com>
Spencer Handley <spencerhandley@gmail.com>
Stefan Dombrowski <sdo451@gmail.com>
Stephen Murphy <smurphy3@apple.com>
Sterling Cobb <sterlingcobb@gmail.com>
Steve Baker <_steve_@outlook.com>
Steven Luscher <react@steveluscher.com>
Stoyan Stefanov <ssttoo@ymail.com>
Sundeep Malladi <sundeep.malladi@gmail.com>
Sunny Juneja <me@sunnyjuneja.com>
Sven Helmberger <fforw@gmx.de>
Sverre Johansen <sverre.johansen@gmail.com>
Sébastien Lorber <lorber.sebastien@gmail.com>
Sławomir Laskowski <laskowski.box@gmail.com>
Taeho Kim <dittos@gmail.com>
Tay Yang Shun <tay.yang.shun@gmail.com>
Ted Kim <ted@vcnc.co.kr>
Teodor Szente <teodor98sz@gmail.com>
Thomas Aylott <oblivious@subtlegradient.com>
Thomas Boyt <thomas.boyt@venmo.com>
Thomas Reggi <socialtr@gmail.com>
Thomas Röggla <t.roggla@cwi.nl>
Thomas Shaddox <thomas@heyzap.com>
Thomas Shafer <thomasjshafer@gmail.com>
ThomasCrvsr <crevoisier.thomas@gmail.com>
Tienchai Wirojsaksaree <tienchai@fb.com>
Tim Routowicz <troutowicz@gmail.com>
Tim Schaub <tschaub@users.noreply.github.com>
Timothy Yung <yungsters@gmail.com>
Tobias Reiss <tag+github@basecode.de>
Tom Haggie <thaggie@gmail.com>
Tom Hauburger <thauburger@gmail.com>
Tom MacWright <tom@macwright.org>
Tom Occhino <tomocchino@gmail.com>
Tomasz Kołodziejski <tkolodziejski@gmail.com>
Tony Spiro <tspiro@tonyspiro.com>
Toru Kobayashi <koba0004@gmail.com>
Trinh Hoang Nhu <trinhhoangnhu@gmail.com>
Tsung Hung <thung@me.com>
Tyler Brock <tyler.brock@gmail.com>
Ustin Zarubin <ustin.zarubin@campusbellhops.com>
Vadim Chernysh <chernysh.vadim@gmail.com>
Varun Rau <varunrau@gmail.com>
Vasiliy Loginevskiy <Yeti.or@gmail.com>
Victor Alvarez <v.alvarez312@gmail.com>
Victor Koenders <victor.koenders@gmail.com>
Ville Immonen <ville.immonen@iki.fi>
Vincent Riemer <vincentriemer@gmail.com>
Vincent Siao <vincent@asana.com>
Vipul A M <vipulnsward@gmail.com>
Vitaly Kramskikh <vkramskikh@gmail.com>
Vjeux <vjeuxx@gmail.com>
Volkan Unsal <spocksplanet@gmail.com>
Wayne Larsen <wayne@larsen.st>
WickyNilliams <WickyNilliams@MBA>
Wincent Colaiuta <win@wincent.com>
Wout Mertens <Wout.Mertens@gmail.com>
Xavier Morel <xmo-odoo@users.noreply.github.com>
XuefengWu <benewu@gmail.com>
Yakov Dalinchuk <murashki@users.noreply.github.com>
Yasar icli <hello@yasaricli.com>
YouBao Nong <noyobo@gmail.com>
Yuichi Hagio <yhagio87@gmail.com>
Yuriy Dybskiy <yuriy@dybskiy.com>
Yuval Dekel <thedekel@fb.com>
Zach Bruggeman <mail@bruggie.com>
Zacharias <zachasme@users.noreply.github.com>
arush <arush@ilovebrands.net>
brafdlog <brafdlog@gmail.com>
chen <kikyous@163.com>
clariroid <clarinette.uranus@gmail.com>
claudiopro <claudio.procida@gmail.com>
cutbko <kutsenko.eugene@hotmail.com>
davidxi <davidgraycn@gmail.com>
dongmeng.ldm <dongmeng.ldm@alibaba-inc.com>
iamchenxin <iamchenxin@gmail.com>
iamdoron <doronpagot@gmail.com>
imagentleman <imagentlemail@gmail.com>
laiso <laiso@lai.so>
li.li <li.li@ele.me>
sugarshin <shinsugar@gmail.com>
wali-s <ahmad3y2k@hotmail.com>
yiminghe <yiminghe@gmail.com>
youmoo <youmoolee@gmail.com>
zhangjg <jinguozhang@qq.com>
Árni Hermann Reynisson <arnihr@gmail.com>
凌恒 <jiakun.dujk@alibaba-inc.com>
张敏 <cookfront@gmail.com>

View File

@@ -1,3 +1,96 @@
## 0.14.1 (October 28, 2015)
### React DOM
- Fixed bug where events wouldn't fire in old browsers when using React in development mode
- Fixed bug preventing use of `dangerouslySetInnerHTML` with Closure Compiler Advanced mode
- Added support for `srcLang`, `default`, and `kind` attributes for `<track>` elements
- Added support for `color` attribute
- Ensured legacy `.props` access on DOM nodes is updated on re-renders
### React TestUtils Add-on
- Fixed `scryRenderedDOMComponentsWithClass` so it works with SVG
### React CSSTransitionGroup Add-on
- Fix bug preventing `0` to be used as a timeout value
### React on Bower
- Added `react-dom.js` to `main` to improve compatibility with tooling
## 0.14.0 (October 7, 2015)
### Major changes
- Split the main `react` package into two: `react` and `react-dom`. This paves the way to writing components that can be shared between the web version of React and React Native. This means you will need to include both files and some functions have been moved from `React` to `ReactDOM`.
- Addons have been moved to seperate packages (`react-addons-clone-with-props`, `react-addons-create-fragment`, `react-addons-css-transition-group`, `react-addons-linked-state-mixin`, `react-addons-perf`, `react-addons-pure-render-mixin`, `react-addons-shallow-compare`, `react-addons-test-utils`, `react-addons-transition-group`, `react-addons-update`, `ReactDOM.unstable_batchedUpdates`).
- Stateless functional components - React components were previously created using React.createClass or using ES6 classes. This release adds a [new syntax](https://facebook.github.io/react/docs/reusable-components.html#stateless-functions) where a user defines a single [stateless render function](https://facebook.github.io/react/docs/reusable-components.html#stateless-functions) (with one parameter: `props`) which returns a JSX element, and this function may be used as a component.
- Refs to DOM components as the DOM node itself. Previously the only useful thing you can do with a DOM component is call `getDOMNode()` to get the underlying DOM node. Starting with this release, a ref to a DOM component _is_ the actual DOM node. **Note that refs to custom (user-defined) components work exactly as before; only the built-in DOM components are affected by this change.**
### Breaking changes
- `React.initializeTouchEvents` is no longer necessary and has been removed completely. Touch events now work automatically.
- Add-Ons: Due to the DOM node refs change mentioned above, `TestUtils.findAllInRenderedTree` and related helpers are no longer able to take a DOM component, only a custom component.
- The `props` object is now frozen, so mutating props after creating a component element is no longer supported. In most cases, [`React.cloneElement`](/react/docs/top-level-api.html#react.cloneelement) should be used instead. This change makes your components easier to reason about and enables the compiler optimizations mentioned above.
- Plain objects are no longer supported as React children; arrays should be used instead. You can use the [`createFragment`](/react/docs/create-fragment.html) helper to migrate, which now returns an array.
- Add-Ons: `classSet` has been removed. Use [classnames](https://github.com/JedWatson/classnames) instead.
- Web components (custom elements) now use native property names. Eg: `class` instead of `className`.
### Deprecations
- `this.getDOMNode()` is now deprecated and `ReactDOM.findDOMNode(this)` can be used instead. Note that in the common case, `findDOMNode` is now unnecessary since a ref to the DOM component is now the actual DOM node.
- `setProps` and `replaceProps` are now deprecated. Instead, call ReactDOM.render again at the top level with the new props.
- ES6 component classes must now extend `React.Component` in order to enable stateless function components. The [ES3 module pattern](/react/blog/2015/01/27/react-v0.13.0-beta-1.html#other-languages) will continue to work.
- Reusing and mutating a `style` object between renders has been deprecated. This mirrors our change to freeze the `props` object.
- Add-Ons: `cloneWithProps` is now deprecated. Use [`React.cloneElement`](/react/docs/top-level-api.html#react.cloneelement) instead (unlike `cloneWithProps`, `cloneElement` does not merge `className` or `style` automatically; you can merge them manually if needed).
- Add-Ons: To improve reliability, `CSSTransitionGroup` will no longer listen to transition events. Instead, you should specify transition durations manually using props such as `transitionEnterTimeout={500}`.
### Notable enhancements
- Added `React.Children.toArray` which takes a nested children object and returns a flat array with keys assigned to each child. This helper makes it easier to manipulate collections of children in your `render` methods, especially if you want to reorder or slice `this.props.children` before passing it down. In addition, `React.Children.map` now returns plain arrays too.
- React uses `console.error` instead of `console.warn` for warnings so that browsers show a full stack trace in the console. (Our warnings appear when you use patterns that will break in future releases and for code that is likely to behave unexpectedly, so we do consider our warnings to be “must-fix” errors.)
- Previously, including untrusted objects as React children [could result in an XSS security vulnerability](http://danlec.com/blog/xss-via-a-spoofed-react-element). This problem should be avoided by properly validating input at the application layer and by never passing untrusted objects around your application code. As an additional layer of protection, [React now tags elements](https://github.com/facebook/react/pull/4832) with a specific [ES2015 (ES6) `Symbol`](http://www.2ality.com/2014/12/es6-symbols.html) in browsers that support it, in order to ensure that React never considers untrusted JSON to be a valid element. If this extra security protection is important to you, you should add a `Symbol` polyfill for older browsers, such as the one included by [Babels polyfill](http://babeljs.io/docs/usage/polyfill/).
- When possible, React DOM now generates XHTML-compatible markup.
- React DOM now supports these standard HTML attributes: `capture`, `challenge`, `inputMode`, `is`, `keyParams`, `keyType`, `minLength`, `summary`, `wrap`. It also now supports these non-standard attributes: `autoSave`, `results`, `security`.
- React DOM now supports these SVG attributes, which render into namespaced attributes: `xlinkActuate`, `xlinkArcrole`, `xlinkHref`, `xlinkRole`, `xlinkShow`, `xlinkTitle`, `xlinkType`, `xmlBase`, `xmlLang`, `xmlSpace`.
- The `image` SVG tag is now supported by React DOM.
- In React DOM, arbitrary attributes are supported on custom elements (those with a hyphen in the tag name or an `is="..."` attribute).
- React DOM now supports these media events on `audio` and `video` tags: `onAbort`, `onCanPlay`, `onCanPlayThrough`, `onDurationChange`, `onEmptied`, `onEncrypted`, `onEnded`, `onError`, `onLoadedData`, `onLoadedMetadata`, `onLoadStart`, `onPause`, `onPlay`, `onPlaying`, `onProgress`, `onRateChange`, `onSeeked`, `onSeeking`, `onStalled`, `onSuspend`, `onTimeUpdate`, `onVolumeChange`, `onWaiting`.
- Many small performance improvements have been made.
- Many warnings show more context than before.
- Add-Ons: A [`shallowCompare`](https://github.com/facebook/react/pull/3355) add-on has been added as a migration path for `PureRenderMixin` in ES6 classes.
- Add-Ons: `CSSTransitionGroup` can now use [custom class names](https://github.com/facebook/react/blob/48942b85/docs/docs/10.1-animation.md#custom-classes) instead of appending `-enter-active` or similar to the transition name.
### New helpful warnings
- React DOM now warns you when nesting HTML elements invalidly, which helps you avoid surprising errors during updates.
- Passing `document.body` directly as the container to `ReactDOM.render` now gives a warning as doing so can cause problems with browser extensions that modify the DOM.
- Using multiple instances of React together is not supported, so we now warn when we detect this case to help you avoid running into the resulting problems.
### Notable bug fixes
- Click events are handled by React DOM more reliably in mobile browsers, particularly in Mobile Safari.
- SVG elements are created with the correct namespace in more cases.
- React DOM now renders `<option>` elements with multiple text children properly and renders `<select>` elements on the server with the correct option selected.
- When two separate copies of React add nodes to the same document (including when a browser extension uses React), React DOM tries harder not to throw exceptions during event handling.
- Using non-lowercase HTML tag names in React DOM (e.g., `React.createElement('DIV')`) no longer causes problems, though we continue to recommend lowercase for consistency with the JSX tag name convention (lowercase names refer to built-in components, capitalized names refer to custom components).
- React DOM understands that these CSS properties are unitless and does not append “px” to their values: `animationIterationCount`, `boxOrdinalGroup`, `flexOrder`, `tabSize`, `stopOpacity`.
- Add-Ons: When using the test utils, `Simulate.mouseEnter` and `Simulate.mouseLeave` now work.
- Add-Ons: ReactTransitionGroup now correctly handles multiple nodes being removed simultaneously.
### React Tools / Babel
#### Breaking Changes
- The `react-tools` package and `JSXTransformer.js` browser file [have been deprecated](/react/blog/2015/06/12/deprecating-jstransform-and-react-tools.html). You can continue using version `0.13.3` of both, but we no longer support them and recommend migrating to [Babel](http://babeljs.io/), which has built-in support for React and JSX.
#### New Features
- Babel 5.8.24 introduces **Inlining React elements:** The `optimisation.react.inlineElements` transform converts JSX elements to object literals like `{type: 'div', props: ...}` instead of calls to `React.createElement`. This should only be enabled in production, since it disables some development warnings/checks.
- Babel 5.8.24 introduces **Constant hoisting for React elements:** The `optimisation.react.constantElements` transform hoists element creation to the top level for subtrees that are fully static, which reduces calls to `React.createElement` and the resulting allocations. More importantly, it tells React that the subtree hasnt changed so React can completely skip it when reconciling. This should only be enabled in production, since it disables some development warnings/checks.
## 0.13.3 (May 8, 2015)
### React Core
@@ -126,6 +219,12 @@
* `es3` restores the previous default behavior. An additional transform is added here to ensure the use of reserved words as properties is safe (eg `this.static` will become `this['static']` for IE8 compatibility).
* The transform for the call spread operator has also been enabled.
### JSXTransformer
#### Breaking Changes
* The return value of `transform` now contains `sourceMap` as a JS object already, not an instance of `SourceMapGenerator`.
### JSX
#### Breaking Changes

View File

@@ -1,6 +1,10 @@
# Contributing to React
React is one of Facebook's first open source projects that is both under very active development and is also being used to ship code to everybody on [facebook.com](https://www.facebook.com). We're still working out the kinks to make contributing to this project as easy and transparent as possible, but we're not quite there yet. Hopefully this document makes the process for contributing clear and preempts some questions you may have.
React is one of Facebook's first open source projects that is both under very active development and is also being used to ship code to everybody on [facebook.com](https://www.facebook.com). We're still working out the kinks to make contributing to this project as easy and transparent as possible, but we're not quite there yet. Hopefully this document makes the process for contributing clear and answers some questions that you may have.
## [Code of Conduct](https://code.facebook.com/codeofconduct)
Facebook has adopted a Code of Conduct that we expect project participants to adhere to. Please read [the full text](https://code.facebook.com/codeofconduct) so that you can understand what actions will and will not be tolerated.
## Our Development Process
@@ -23,11 +27,11 @@ The core team will be monitoring for pull requests. When we get one, we'll run s
5. Make sure your code lints (`grunt lint`) - we've done our best to make sure these rules match our internal linting guidelines.
6. If you haven't already, complete the CLA.
### Contributor License Agreement ("CLA")
### Contributor License Agreement (CLA)
In order to accept your pull request, we need you to submit a CLA. You only need to do this once, so if you've done this for another Facebook open source project, you're good to go. If you are submitting a pull request for the first time, just let us know that you have completed the CLA and we can cross-check with your GitHub username.
[Complete your CLA here](https://code.facebook.com/cla)
[Complete your CLA here.](https://code.facebook.com/cla)
## Bugs
@@ -50,15 +54,20 @@ Facebook has a [bounty program](https://www.facebook.com/whitehat/) for the safe
## Style Guide
### Code
Our linter will catch most styling issues that may exist in your code.
You can check the status of your code styling by simply running: `grunt lint`
* Use semicolons;
* Commas last,
However, there are still some styles that the linter cannot pick up. If you are unsure about something, looking at [Airbnb's Style Guide](https://github.com/airbnb/javascript) will guide you in the right direction.
### Code Conventions
* Use semicolons `;`
* Commas last `,`
* 2 spaces for indentation (no tabs)
* Prefer `'` over `"`
* `'use strict';`
* 80 character line length
* "Attractive"
* Write "attractive" code
* Do not use the optional parameters of `setTimeout` and `setInterval`
### Documentation

View File

@@ -1,18 +1,7 @@
'use strict';
var jsxTask = require('./grunt/tasks/jsx');
var browserifyTask = require('./grunt/tasks/browserify');
var populistTask = require('./grunt/tasks/populist');
var webdriverPhantomJSTask = require('./grunt/tasks/webdriver-phantomjs');
var webdriverJasmineTasks = require('./grunt/tasks/webdriver-jasmine');
var sauceTunnelTask = require('./grunt/tasks/sauce-tunnel');
var npmTask = require('./grunt/tasks/npm');
var releaseTasks = require('./grunt/tasks/release');
var npmReactTasks = require('./grunt/tasks/npm-react');
var npmReactToolsTasks = require('./grunt/tasks/npm-react-tools');
var versionCheckTask = require('./grunt/tasks/version-check');
var gemReactSourceTasks = require('./grunt/tasks/gem-react-source');
var eslintTask = require('./grunt/tasks/eslint');
var assign = require('object-assign');
var path = require('path');
module.exports = function(grunt) {
@@ -20,26 +9,36 @@ module.exports = function(grunt) {
pkg: grunt.file.readJSON('package.json'),
jsx: require('./grunt/config/jsx'),
browserify: require('./grunt/config/browserify'),
populist: require('./grunt/config/populist')(grunt),
connect: require('./grunt/config/server')(grunt),
'webdriver-jasmine': require('./grunt/config/webdriver-jasmine'),
'webdriver-perf': require('./grunt/config/webdriver-perf'),
npm: require('./grunt/config/npm'),
clean: [
'./build',
'./*.gem',
'./docs/_site',
'./examples/shared/*.js',
'.module-cache'
'.module-cache',
],
jshint: require('./grunt/config/jshint'),
/*eslint-disable camelcase */
compare_size: require('./grunt/config/compare_size')
compare_size: require('./grunt/config/compare_size'),
/*eslint-enable camelcase */
});
grunt.config.set('compress', require('./grunt/config/compress'));
function spawnGulp(args, opts, done) {
grunt.util.spawn({
// This could be more flexible (require.resolve & lookup bin in package)
// but if it breaks we'll fix it then.
cmd: path.join('node_modules', '.bin', 'gulp'),
args: args,
opts: assign({stdio: 'inherit'}, opts),
}, function(err, result, code) {
if (err) {
grunt.fail.fatal('Something went wrong running gulp: ', result);
}
done(code === 0);
});
}
Object.keys(grunt.file.readJSON('package.json').devDependencies)
.filter(function(npmTaskName) {
return npmTaskName.indexOf('grunt-') === 0;
@@ -51,227 +50,89 @@ module.exports = function(grunt) {
grunt.loadNpmTasks(npmTaskName);
});
grunt.registerTask('eslint', eslintTask);
grunt.registerTask('eslint', require('./grunt/tasks/eslint'));
grunt.registerTask('lint', ['eslint']);
grunt.registerTask(
'download-previous-version',
require('./grunt/tasks/download-previous-version.js')
);
grunt.registerTask('delete-build-modules', function() {
if (grunt.file.exists('build/modules')) {
grunt.file.delete('build/modules');
}
// Use gulp here.
spawnGulp(['react:clean'], null, this.async());
});
// Register jsx:normal and :release tasks.
grunt.registerMultiTask('jsx', jsxTask);
grunt.registerMultiTask('jsx', require('./grunt/tasks/jsx'));
// Our own browserify-based tasks to build a single JS file build
grunt.registerMultiTask('browserify', browserifyTask);
// Our own browserify-based tasks to build a single JS file build.
grunt.registerMultiTask('browserify', require('./grunt/tasks/browserify'));
grunt.registerMultiTask('populist', populistTask);
grunt.registerTask('sauce-tunnel', sauceTunnelTask);
grunt.registerMultiTask('webdriver-jasmine', webdriverJasmineTasks);
grunt.registerMultiTask('webdriver-perf', require('./grunt/tasks/webdriver-perf'));
grunt.registerMultiTask('npm', npmTask);
grunt.registerMultiTask('npm', require('./grunt/tasks/npm'));
var npmReactTasks = require('./grunt/tasks/npm-react');
grunt.registerTask('npm-react:release', npmReactTasks.buildRelease);
grunt.registerTask('npm-react:pack', npmReactTasks.packRelease);
grunt.registerTask('npm-react-tools:release', npmReactToolsTasks.buildRelease);
grunt.registerTask('npm-react-tools:pack', npmReactToolsTasks.packRelease);
grunt.registerTask('gem-react-source:release', gemReactSourceTasks.buildRelease);
grunt.registerTask('gem-react-source:pack', gemReactSourceTasks.packRelease);
grunt.registerTask('version-check', versionCheckTask);
var npmReactDOMTasks = require('./grunt/tasks/npm-react-dom');
grunt.registerTask('npm-react-dom:release', npmReactDOMTasks.buildRelease);
grunt.registerTask('npm-react-dom:pack', npmReactDOMTasks.packRelease);
var npmReactAddonsTasks = require('./grunt/tasks/npm-react-addons');
grunt.registerTask('npm-react-addons:release', npmReactAddonsTasks.buildReleases);
grunt.registerTask('npm-react-addons:pack', npmReactAddonsTasks.packReleases);
grunt.registerTask('version-check', require('./grunt/tasks/version-check'));
grunt.registerTask('build:basic', [
'jsx:normal',
'build-modules',
'version-check',
'browserify:basic'
'browserify:basic',
]);
grunt.registerTask('build:addons', [
'jsx:normal',
'browserify:addons'
]);
grunt.registerTask('build:transformer', [
'jsx:normal',
'browserify:transformer'
'build-modules',
'browserify:addons',
]);
grunt.registerTask('build:min', [
'jsx:normal',
'build-modules',
'version-check',
'browserify:min'
'browserify:min',
]);
grunt.registerTask('build:addons-min', [
'jsx:normal',
'browserify:addonsMin'
]);
grunt.registerTask('build:withCodeCoverageLogging', [
'jsx:normal',
'version-check',
'browserify:withCodeCoverageLogging'
]);
grunt.registerTask('build:perf', [
'jsx:normal',
'version-check',
'browserify:transformer',
'browserify:basic',
'browserify:min',
'download-previous-version'
]);
grunt.registerTask('build:test', [
'delete-build-modules',
'jsx:test',
'version-check',
'populist:test'
'build-modules',
'browserify:addonsMin',
]);
grunt.registerTask('build:npm-react', [
'version-check',
'jsx:normal',
'npm-react:release'
]);
grunt.registerTask('build:gem-react-source', [
'build',
'gem-react-source:release'
'build-modules',
'npm-react:release',
]);
grunt.registerTask('build:react-dom', require('./grunt/tasks/react-dom'));
grunt.registerTask('webdriver-phantomjs', webdriverPhantomJSTask);
grunt.registerTask('coverage:parse', require('./grunt/tasks/coverage-parse'));
grunt.registerTask('test:webdriver:phantomjs', [
'connect',
'webdriver-phantomjs',
'webdriver-jasmine:local'
]);
grunt.registerTask('perf:webdriver:phantomjs', [
'connect',
'webdriver-phantomjs',
'webdriver-perf:local'
]);
grunt.registerTask('test:full', [
'build:test',
'build:basic',
'connect',
'webdriver-phantomjs',
'webdriver-jasmine:local',
'sauce-tunnel',
'webdriver-jasmine:saucelabs_android',
'webdriver-jasmine:saucelabs_firefox',
'webdriver-jasmine:saucelabs_chrome'
]);
grunt.registerTask('perf:full', [
'build:perf',
'connect',
'webdriver-phantomjs',
'webdriver-perf:local',
'sauce-tunnel',
'webdriver-perf:saucelabs_firefox',
'webdriver-perf:saucelabs_chrome',
'webdriver-perf:saucelabs_ie11',
'webdriver-perf:saucelabs_ie8'
]);
grunt.registerTask('test:webdriver:saucelabs', [
'build:test',
'build:basic',
'connect',
'sauce-tunnel',
'webdriver-jasmine:saucelabs_' + (process.env.BROWSER_NAME || 'ie8')
]);
grunt.registerTask('test:webdriver:saucelabs:modern', [
'build:test',
'build:basic',
'connect',
'sauce-tunnel',
'webdriver-jasmine:saucelabs_android',
'webdriver-jasmine:saucelabs_firefox',
'webdriver-jasmine:saucelabs_chrome',
'webdriver-jasmine:saucelabs_ie11'
]);
grunt.registerTask('test:webdriver:saucelabs:ie', [
'build:test',
'build:basic',
'connect',
'sauce-tunnel',
'webdriver-jasmine:saucelabs_ie8',
'webdriver-jasmine:saucelabs_ie9',
'webdriver-jasmine:saucelabs_ie10',
'webdriver-jasmine:saucelabs_ie11'
]);
grunt.registerTask('test:webdriver:saucelabs:ios', [
'build:test',
'build:basic',
'connect',
'sauce-tunnel',
'webdriver-jasmine:saucelabs_ios6_1',
'webdriver-jasmine:saucelabs_ios5_1',
'webdriver-jasmine:saucelabs_ios4'
]);
grunt.registerTask('test:coverage', [
'build:test',
'build:withCodeCoverageLogging',
'test:webdriver:phantomjs',
'coverage:parse'
]);
grunt.registerTask('fasttest', function() {
if (grunt.option('debug')) {
grunt.task.run('build:test', 'connect:server:keepalive');
} else {
grunt.task.run('build:test', 'test:webdriver:phantomjs');
}
});
grunt.registerTask('test', function() {
if (grunt.option('debug')) {
grunt.task.run('build:test', 'build:basic', 'connect:server:keepalive');
} else {
grunt.task.run('build:test', 'build:basic', 'test:webdriver:phantomjs');
}
});
grunt.registerTask('perf', ['build:perf', 'perf:webdriver:phantomjs']);
grunt.registerTask('test', ['jest']);
grunt.registerTask('npm:test', ['build', 'npm:pack']);
grunt.registerTask('jest', require('./grunt/tasks/jest'));
// Optimized build task that does all of our builds. The subtasks will be run
// in order so we can take advantage of that and only run jsx:normal once.
// in order so we can take advantage of that and only run build-modules once.
grunt.registerTask('build', [
'delete-build-modules',
'jsx:normal',
'build-modules',
'version-check',
'browserify:basic',
'browserify:transformer',
'browserify:addons',
'browserify:min',
'browserify:addonsMin',
'build:react-dom',
'npm-react:release',
'npm-react:pack',
'npm-react-tools:release',
'npm-react-tools:pack',
'compare_size'
'npm-react-dom:release',
'npm-react-dom:pack',
'npm-react-addons:release',
'npm-react-addons:pack',
'compare_size',
]);
// Automate the release!
var releaseTasks = require('./grunt/tasks/release');
grunt.registerTask('release:setup', releaseTasks.setup);
grunt.registerTask('release:bower', releaseTasks.bower);
grunt.registerTask('release:docs', releaseTasks.docs);
@@ -282,15 +143,17 @@ module.exports = function(grunt) {
'release:setup',
'clean',
'build',
'gem-react-source:release',
'gem-react-source:pack',
'release:bower',
'release:starter',
'compress',
'release:docs',
'release:msg'
'release:msg',
]);
// The default task - build - to keep setup easy
grunt.registerTask('build-modules', function() {
spawnGulp(['react:modules'], null, this.async());
});
// The default task - build - to keep setup easy.
grunt.registerTask('default', ['build']);
};

View File

@@ -1,4 +1,4 @@
# [React](https://facebook.github.io/react/) [![Build Status](https://travis-ci.org/facebook/react.svg?branch=0.13-stable)](https://travis-ci.org/facebook/react)
# [React](https://facebook.github.io/react/) [![Build Status](https://travis-ci.org/facebook/react.svg?branch=0.14-stable)](https://travis-ci.org/facebook/react) [![npm version](https://badge.fury.io/js/react.svg)](http://badge.fury.io/js/react)
React is a JavaScript library for building user interfaces.
@@ -8,7 +8,7 @@ React is a JavaScript library for building user interfaces.
**NEW**! Check out our newest project [React Native](https://github.com/facebook/react-native), which uses React and JavaScript to create native mobile apps.
[Learn how to use React in your own project.](https://facebook.github.io/react/docs/getting-started.html).
[Learn how to use React in your own project](https://facebook.github.io/react/docs/getting-started.html).
## Examples
@@ -21,7 +21,7 @@ var HelloMessage = React.createClass({
}
});
React.render(
ReactDOM.render(
<HelloMessage name="John" />,
document.getElementById('container')
);
@@ -37,12 +37,12 @@ The fastest way to get started is to serve JavaScript from the CDN (also availab
```html
<!-- The core React library -->
<script src="https://fb.me/react-0.13.3.js"></script>
<!-- In-browser JSX transformer, remove when pre-compiling JSX. -->
<script src="https://fb.me/JSXTransformer-0.13.3.js"></script>
<script src="https://fb.me/react-0.14.1.js"></script>
<!-- The ReactDOM Library -->
<script src="https://fb.me/react-dom-0.14.1.js"></script>
```
We've also built a [starter kit](https://facebook.github.io/react/downloads/react-0.13.3.zip) which might be useful if this is your first time using React. It includes a webpage with an example of using React with live code.
We've also built a [starter kit](https://facebook.github.io/react/downloads/react-0.14.1.zip) which might be useful if this is your first time using React. It includes a webpage with an example of using React with live code.
If you'd like to use [bower](http://bower.io), it's as easy as:
@@ -60,7 +60,7 @@ The process to build `react.js` is built entirely on top of node.js, using many
#### Prerequisites
* You have `node` installed at v0.10.0+ (it might work at lower versions, we just haven't tested).
* You have `node` installed at v0.10.0+ (it might work at lower versions, we just haven't tested) and `npm` at v2.0.0+.
* You are familiar with `npm` and know whether or not you need to use `sudo` when installing packages globally.
* You are familiar with `git`.
@@ -86,8 +86,6 @@ We use grunt to automate many tasks. Run `grunt -h` to see a mostly complete lis
grunt test
# Build and run tests in your browser
grunt test --debug
# For speed, you can use fasttest and add --filter to only run one test
grunt fasttest --filter=ReactIdentity
# Lint the code with ESLint
grunt lint
# Wipe out build directory
@@ -105,3 +103,6 @@ Examples provided in this repository and in the documentation are [separately li
### More…
There's only so much we can cram in here. To read more about the community and guidelines for submitting pull requests, please read the [Contributing document](CONTRIBUTING.md).
## Troubleshooting
See the [Troubleshooting Guide](https://github.com/facebook/react/wiki/Troubleshooting)

51
bin/jsx
View File

@@ -1,51 +0,0 @@
#!/usr/bin/env node
// -*- mode: js -*-
'use strict';
var transform = require('../main').transform;
require('commoner').version(
require('../package.json').version
).resolve(function(id) {
return this.readModuleP(id);
}).option(
'--harmony',
'Turns on JS transformations such as ES6 Classes etc.'
).option(
'--target [version]',
'Specify your target version of ECMAScript. Valid values are "es3" and ' +
'"es5". The default is "es5". "es3" will avoid uses of defineProperty and ' +
'will quote reserved words. WARNING: "es5" is not properly supported, even ' +
'with the use of es5shim, es5sham. If you need to support IE8, use "es3".',
'es5'
).option(
'--strip-types',
'Strips out type annotations.'
).option(
'--es6module',
'Parses the file as a valid ES6 module. ' +
'(Note that this means implicit strict mode)'
).option(
'--non-strict-es6module',
'Parses the file as an ES6 module, except disables implicit strict-mode. ' +
'(This is useful if you\'re porting non-ES6 modules to ES6, but haven\'t ' +
'yet verified that they are strict-mode safe yet)'
).option(
'--source-map-inline',
'Embed inline sourcemap in transformed source'
).process(function(id, source) {
// This is where JSX, ES6, etc. desugaring happens.
// We don't do any pre-processing of options so that the command line and the
// JS API both expose the same set of options. We do extract the options that
// we care about from commoner though so we aren't passing too many things
// along.
var options = {
harmony: this.options.harmony,
sourceMap: this.options.sourceMapInline,
stripTypes: this.options.stripTypes,
es6module: this.options.es6module,
nonStrictEs6module: this.options.nonStrictEs6module,
target: this.options.target
};
return transform(source, options);
});

View File

@@ -1,12 +1,17 @@
#!/usr/bin/env node
// -*- mode: js -*-
"use strict";
// vim: set ft=javascript :
var transform = require('../main').transform;
var propagate = require("../vendor/constants").propagate;
'use strict';
require("commoner").version(
require("../package.json").version
var babel = require('babel');
var devExpressionPlugin = require('fbjs/scripts/babel/dev-expression');
var TRANSFORM_IGNORE_RE = /^WebComponents$/;
require('commoner').version(
require('../package.json').version
).resolve(function(id) {
var context = this;
@@ -27,30 +32,16 @@ require("commoner").version(
}).process(function(id, source) {
var context = this;
var constants = context.config.constants || {};
// This is where JSX, ES6, etc. desugaring happens.
source = transform(source, {harmony: true, stripTypes: true});
// Constant propagation means removing any obviously dead code after
// replacing constant expressions with literal (boolean) values.
source = propagate(constants, source);
if (context.config.mocking) {
// Make sure there is exactly one newline at the end of the module.
source = source.replace(/\s+$/m, "\n");
return context.getProvidedP().then(function(idToPath) {
if (id !== "mock-modules" &&
id !== "mocks" &&
id !== "test/all" &&
idToPath.hasOwnProperty("mock-modules")) {
return source + '\nrequire("mock-modules").register(' +
JSON.stringify(id) + ', module);\n';
}
return source;
});
// This is hacky but that's ok… It really only matters for tests since it
// won't otherwise be in the dependency tree.
if (!TRANSFORM_IGNORE_RE.test(id)) {
// This is where JSX, ES6, etc. desugaring happens.
source = babel.transform(source, {
blacklist: ['spec.functionName', 'validation.react'],
plugins: [devExpressionPlugin],
filename: id,
}).code;
}
return source;

View File

@@ -21,7 +21,7 @@ Once you have RubyGems and installed Bundler (via `gem install bundler`), use it
```sh
$ cd react/docs
$ bundle install # Might need sudo.
$ npm install # Might need sudo.
$ npm install
```
### Instructions

View File

@@ -10,7 +10,7 @@ end
desc "watch js"
task :watch do
Process.spawn "../bin/jsx --watch --harmony _js js"
Process.spawn "../node_modules/.bin/babel _js --out-dir=js --watch"
Process.waitall
end

View File

@@ -36,4 +36,4 @@ sass:
sass_dir: _css
gems:
- jekyll-redirect-from
react_version: 0.13.3
react_version: 0.14.0

View File

@@ -1,44 +1,75 @@
---
- - Aaron Franks
- - '839'
- Aaron Franks
- Aaron Gelter
- Adam Krebs
- Adam Mark
- Adam Solove
- Adam Timberlake
- Adam Zapletal
- Ahmad Wali Sidiqi
- Alan Souza
- Alan deLevie
- Alastair Hole
- Alex
- Alex Boyd
- Alex Lopatin
- Alex Mykyta
- Alex Pien
- Alex Smith
- Alex Zelenskiy
- Alexander Shtuchkin
- Alexander Solovyov
- Alexander Tseung
- Alexandre Gaudencio
- Alexey Raspopov
- Alexey Shamrin
- Andre Z Sanchez
- Andreas Savvides
- Andreas Svensson
- Andres Kalle
- Andres Suarez
- Andrew Cobby
- Andrew Davey
- Andrew Rasmussen
- Andrew Sokolov
- Andrew Zich
- Andrey Popp
- Anthony van der Hoorn
- Antonio Ruberto
- Antti Ahti
- Anuj Tomar
- AoDev
- Areeb Malik
- Aria Buckles
- Aria Stewart
- Arian Faurtosh
- Artem Nezvigin
- Austin Wright
- Ayman Osman
- Baraa Hamodi
- Bartosz Kaszubowski
- Basarat Ali Syed
- Battaile Fauber
- Beau Smith
- Ben Alpert
- Ben Anderson
- Ben Foxall
- Ben Jaffe
- Ben Moss
- Ben Newman
- Ben Ripkens
- Benjamin Keen
- Benjamin Leiken
- Benjamin Woodruff
- Bill Fisher
- Blaine Hatab
- Blaine Kasten
- Bob Eagan
- Bob Ralian
- Bob Renwick
- Bojan Mihelac
- Bradley Spaulding
- Brandon Bloom
- Brandon Tilley
- Brian Cooke
@@ -51,103 +82,166 @@
- Bruno Škvorc
- Cam Song
- Cam Spiers
- Carter Chung
- Cassus Adam Banko
- Cat Chen
- Cedric Sohrauer
- Charles Marsh
- Chase Adams
- Cheng Lou
- Chitharanjan Das
- Chris Grovers
- Chris Ha
- Chris Rebert
- Chris Sciolla
- Christian
- Christian Alfoni
- Christian Oliff
- Christian Roman
- Christoph Pojer
- Christopher Monsanto
- Clay Allsopp
- Connor McSheffrey
- Cory House
- Cotton Hou
- Cristovao Verstraeten
- Damien Pellier
- Dan Abramov
- Dan Fox
- Dan Schafer
- Daniel Carlsson
- Daniel Cousens
- Daniel Friesen
- Daniel Gasienica
- Daniel Hejl
- Daniel Lo Nigro
- Daniel Mané
- Daniel Miladinov
- Daniel Rodgers-Pryor
- Daniel Schonfeld
- Danny Ben-David
- Darcy
- Daryl Lau
- Darío Javier Cravero
- David Baker
- David Goldberg
- David Greenspan
- David Hellsing
- David Hu
- David Mininger
- David Neubauer
- David Percy
- Denis Sokolov
- Dennis Johnson
- Devon Blandin
- Devon Harvey
- Dmitrii Abramov
- Dmitry Blues
- Dmitry Mazuro
- Domenico Matteo
- Don Abrams
- Dustan Kasten
- Dustin Getz
- Dylan Harrington
- Eduardo Garcia
- Edvin Erikson
- Elaine Fang
- Enguerran
- Eric Clemmons
- Eric Eastwood
- Eric Florenzano
- Eric O'Connell
- Eric Schoffstall
- Erik Harper
- Espen Hovlandsdal
- Evan Coonrod
- Fabio M. Costa
- Federico Rampazzo
- Felipe Oliveira Carvalho
- Felix Gnass
- Felix Kling
- Fernando Correia
- Frankie Bagnardi
- François-Xavier Bois
- Fred Zhao
- G Scott Olson
- G. Kay Lee
- Gabe Levi
- Gareth Nicholson
- Garren Smith
- Geert Pasteels
- Geert-Jan Brits
- George A Sisco III
- Georgii Dolzhykov
- Gilbert
- Glen Mailer
- Grant Timmerman
- Greg Hurrell
- Greg Perkins
- Greg Roodt
- Gregory
- Guangqiang Dong
- Guido Bouman
- Harry Hull
- Harry Marr
- - Harry Moreno
- Harshad Sabne
- Hekar Khani
- Hendrik Swanepoel
- Henrik Nyh
- Henry Zhu
- Hou Chia
- Hugo Jobling
- Héliton Nordt
- Ian Obermiller
- Ignacio Carbajo
- Igor Scekic
- Ilya Shuklin
- Ilyá Belsky
- Ingvar Stepanyan
- Irae Carvalho
- Isaac Salier-Hellendag
- Ivan Kozik
- Ivan Krechetov
- Ivan Vergiliev
- J. Andrew Brassington
- J. Renée Beach
- JD Isaacks
- JW
- Jack Zhang
- Jacob Gable
- Jacob Greenleaf
- Jae Hun Ro
- Jaime Mingo
- Jakub Malinowski
- James
- James Brantly
- James Burnett
- James Ide
- James Long
- James Pearce
- James Seppi
- James South
- Jamie Wong
- Jamis Charles
- Jamison Dance
- Jan Hancic
- Jan Kassens
- Jan Raasch
- Jared Forsyth
- Jason
- Jason Bonta
- Jason Ly
- Jason Miller
- Jason Quense
- Jason Trill
- Jason Webster
- Jay Jaeho Lee
- Jean Lauliac
- Jed Watson
- Jeff Barczewski
- Jeff Carpenter
- Jeff Chan
- Jeff Hicken
- Jeff Kolesky
- Jeff Morrison
- Jeff Welch
@@ -158,50 +252,81 @@
- Jim Sproch
- Jimmy Jea
- Jing Chen
- Jinwoo Oh
- Jiyeon Seo
- Joe Stein
- Joel Auterson
- Johannes Baiter
- Johannes Emerich
- Johannes Lumpe
- John Heroy
- John Watson
- Jon Beebe
- Jon Chester
- Jon Hester
- Jon Madison
- Jon Scott Clark
- Jon Tewksbury
- Jonas Enlund
- Jonas Gebhardt
- Jonathan Hsu
- Jordan Harband
- Jordan Walke
- Jorrit Schippers
- Joseph Nudell
- Joseph Savona
- Josh Bassett
- Josh Duck
- Josh Yudaken
- Joshua Go
- Joshua Goldberg
- Joshua Ma
- João Valente
- Juan Serrano
- Julen Ruiz Aizpuru
- Julian Viereck
- Julien Bordellier
- Jun Wu
- Juraj Dudak
- Justin Jaffray
- Justin Robison
- Justin Woo
- Kamron Batman
- Karl Mikkelsen
- Karpich Dmitry
- Keito Uchiyama
- Kevin Coughlin
- Kevin Huang
- Kevin Old
- KimCoding
- Kirk Steven Hansen
- Kit Randel
- Kohei TAKATA
- Koo Youngmin
- Kunal Mehta
- Kurt Ruppel
- Kyle Kelley
- Kyle Mathews
- Laurence Rowe
- Laurent Etiemble
- Lee Byron
- Lee Jaeyoung
- Lei
- Leon Fedotov
- Leon Yip
- Leonardo YongUk Kim
- Levi Buzolic
- Levi McCallum
- Lily
- Logan Allen
- Luigy Leon
- Luke Horvat
- MIKAMI Yoshiyuki
- Marcin K.
- Marcin Kwiatkowski
- Marcin Szczepanski
- Mariano Desanze
- Marjan
- Mark Anderson
- Mark Funk
- Mark Hintz
@@ -212,28 +337,49 @@
- Martin Andert
- Martin Jul
- Martin Konicek
- Martin Mihaylov
- Masaki KOBAYASHI
- Mathieu M-Gosselin
- Matias Singers
- Matsunoki
- Matt Brookes
- Matt Dunn-Rankin
- Matt Harrison
- Matt Huggins
- Matt Zabriskie
- Matthew Dapena-Tretter
- Matthew Johnston
- Matthew King
- Matthew Miner
- Matthias Le Brun
- Matti Nelimarkka
- Max F. Albrecht
- Max Heiber
- Maxi Ferreira
- Maxim Abramchuk
- Merrick Christensen
- Mert Kahyaoğlu
- Michael Chan
- Michael Randers-Pehrson
- Michael Ridgway
- Michael Warner
- Michal Srb
- Michelle Todd
- Mihai Parparita
- Mike D Pilsbury
- - Mike Groseclose
- Mikolaj Dadela
- Minwe LUO
- Miorel Palii
- - Mouad Debbar
- Morhaus
- Mouad Debbar
- Murad
- Murray M. Moss
- Nadeesha Cabral
- Naman Goel
- Nate Hunzaker
- Nathan White
- Neri Marschik
- Nicholas Bergson-Shilcock
- Nick Fitzgerald
- Nick Gavalas
@@ -242,14 +388,20 @@
- Nick Thompson
- Nick Williams
- Niklas Boström
- Ning Xia
- Niole Nelson
- Oiva Eskola
- Oleg
- Oleksii Markhovskyi
- Oliver Zeigermann
- Olivier Tassinari
- Owen Coutts
- Pablo Lacerda de Miranda
- Paolo Moretti
- Pascal Hartig
- Patrick Laughlin
- Patrick Stapleton
- Paul Harper
- Paul OShannessy
- Paul Seiffert
- Paul Shen
@@ -262,6 +414,7 @@
- Petri Lievonen
- Pieter Vanderwerff
- Pouja Nikray
- Prathamesh Sonpatki
- Preston Parry
- Rafael
- Rafal Dittwald
@@ -269,76 +422,131 @@
- Randall Randall
- Ray
- Raymond Ha
- Reed Loden
- Richard D. Worth
- Richard Feldman
- Richard Kho
- Richard Littauer
- Richard Livesey
- Richard Wood
- Rick Beerendonk
- Riley Tomasek
- Rob Arnold
- Robert Knight
- Robert Sedovsek
- Robin Berjon
- Roman Vanesyan
- Russ
- Ryan Seddon
- Sahat Yalkabov
- Saif Hakim
- Sam Saccone
- Sam Selikoff
- Samy Al Zahrani
- Sander Spies
- Scott Burch
- Scott Feeney
- Sean Kinsey
- Sebastian Markbåge
- Seoh Char
- Serg
- Sergey Generalov
- Sergey Rubanov
- Seyi Adebajo
- Shane O'Sullivan
- Shaun Trennery
- Sheraz
- ShihChi Huang
- Shim Won
- Shota Kubota
- Shripad K
- Sibi
- Simon Højberg
- Simon Welsh
- Sophia Westwood
- Spencer Handley
- Stefan Dombrowski
- Stephen Murphy
- Sterling Cobb
- Steve Baker
- Steven Luscher
- Stoyan Stefanov
- Sundeep Malladi
- Sunny Juneja
- Sven Helmberger
- Sverre Johansen
- Sébastien Lorber
- Sławomir Laskowski
- Taeho Kim
- Tay Yang Shun
- Ted Kim
- Teodor Szente
- Thomas Aylott
- Thomas Boyt
- Thomas Reggi
- Thomas Röggla
- Thomas Shaddox
- Thomas Shafer
- ThomasCrvsr
- Tienchai Wirojsaksaree
- Tim Routowicz
- Tim Schaub
- Timothy Yung
- Tobias Reiss
- Tom Haggie
- Tom Hauburger
- Tom MacWright
- Tom Occhino
- Tomasz Kołodziejski
- Tony Spiro
- Toru Kobayashi
- Trinh Hoang Nhu
- Tsung Hung
- Tyler Brock
- Ustin Zarubin
- Vadim Chernysh
- Varun Rau
- Vasiliy Loginevskiy
- Victor Alvarez
- Victor Koenders
- Ville Immonen
- Vincent Riemer
- Vincent Siao
- Vipul A M
- Vitaly Kramskikh
- Vjeux
- Volkan Unsal
- Wayne Larsen
- WickyNilliams
- Wincent Colaiuta
- Wout Mertens
- Xavier Morel
- XuefengWu
- Yakov Dalinchuk
- Yasar icli
- YouBao Nong
- Yuichi Hagio
- Yuriy Dybskiy
- Yuval Dekel
- Zach Bruggeman
- Zacharias
- arush
- brafdlog
- chen
- clariroid
- claudiopro
- cutbko
- davidxi
- dongmeng.ldm
- iamchenxin
- iamdoron
- imagentleman
- "Árni Hermann Reynisson"
- "张敏"
- laiso
- li.li
- sugarshin
- wali-s
- yiminghe
- youmoo
- zhangjg
- Árni Hermann Reynisson
- 凌恒
- 张敏

View File

@@ -1,8 +1,9 @@
# Map of short name to more information. `name` will be used but if you don't
# want to use your real name, just use whatever. If url is included, your name
# will be a link to the provided url.
billandjing:
name: Bill Fisher and Jing Chen
benigeri:
name: Paul Benigeri
url: https://github.com/benigeri
chenglou:
name: Cheng Lou
url: https://twitter.com/_chenglou
@@ -18,8 +19,12 @@ jaredly:
jgebhardt:
name: Jonas Gebhardt
url: https://twitter.com/jonasgebhardt
jimandsebastian:
name: Jim Sproch and Sebastian Markbåge
jimfb:
name: Jim Sproch
url: http://www.jimsproch.com
jingc:
name: Jing Chen
url: https://twitter.com/jingc
josephsavona:
name: Joseph Savona
url: https://twitter.com/en_JS

View File

@@ -43,7 +43,7 @@
title: Working With the Browser
subitems:
- id: more-about-refs
title: More About Refs
title: Refs to Components
- id: tooling-integration
title: Tooling Integration
- id: addons
@@ -53,8 +53,6 @@
title: Animation
- id: two-way-binding-helpers
title: Two-Way Binding Helpers
- id: class-name-manipulation
title: Class Name Manipulation
- id: test-utils
title: Test Utilities
- id: clone-with-props
@@ -69,6 +67,8 @@
title: Performance Tools
- id: advanced-performance
title: Advanced Performance
- id: context
title: Context
- title: Reference
items:
- id: top-level-api

View File

@@ -30,8 +30,6 @@
title: Communicate Between Components
- id: expose-component-functions
title: Expose Component Functions
- id: references-to-components
title: References to Components
- id: children-undefined
title: this.props.children undefined
- id: use-react-with-other-libraries

View File

@@ -1,5 +1,4 @@
{% assign page = include.page %}
{% assign author = site.data.authors[page.author] %}
<h1>
{% if include.isPermalink %}
@@ -12,11 +11,14 @@
<p class="meta">
{{ page.date | date: "%B %e, %Y" }}
by
{% if author.url %}
<a href="{{author.url}}">{{ author.name }}</a>
{% else %}
{{ author.name }}
{% endif %}
{% for author in page.authors %}
{% if author.url %}
<a href="{{author.url}}">{{ author.name }}</a>
{% else %}
{{ author.name }}
{% endif %}
{% if forloop.last == false %} and {% endif %}
{% endfor %}
</p>
<hr>

View File

@@ -1,3 +1,7 @@
---
rules:
block-scoped-var: false
no-undef: false
block-scoped-var: 0
no-undef: 0
strict: 0
react/react-in-jsx-scope: 0
react/jsx-no-undef: 0

View File

@@ -5,10 +5,10 @@ var HelloMessage = React.createClass({
}
});
React.render(<HelloMessage name="John" />, mountNode);
ReactDOM.render(<HelloMessage name="John" />, mountNode);
`;
React.render(
ReactDOM.render(
<ReactPlayground codeText={HELLO_COMPONENT} />,
document.getElementById('helloExample')
);

View File

@@ -4,7 +4,7 @@ var MarkdownEditor = React.createClass({
return {value: 'Type some *markdown* here!'};
},
handleChange: function() {
this.setState({value: React.findDOMNode(this.refs.textarea).value});
this.setState({value: this.refs.textarea.value});
},
rawMarkup: function() {
return { __html: marked(this.state.value, {sanitize: true}) };
@@ -27,10 +27,10 @@ var MarkdownEditor = React.createClass({
}
});
React.render(<MarkdownEditor />, mountNode);
ReactDOM.render(<MarkdownEditor />, mountNode);
`;
React.render(
ReactDOM.render(
<ReactPlayground codeText={MARKDOWN_COMPONENT} />,
document.getElementById('markdownExample')
);

View File

@@ -19,10 +19,10 @@ var Timer = React.createClass({
}
});
React.render(<Timer />, mountNode);
ReactDOM.render(<Timer />, mountNode);
`;
React.render(
ReactDOM.render(
<ReactPlayground codeText={TIMER_COMPONENT} />,
document.getElementById('timerExample')
);

View File

@@ -34,10 +34,10 @@ var TodoApp = React.createClass({
}
});
React.render(<TodoApp />, mountNode);
ReactDOM.render(<TodoApp />, mountNode);
`;
React.render(
ReactDOM.render(
<ReactPlayground codeText={TODO_COMPONENT} />,
document.getElementById('todoExample')
);

View File

@@ -78,5 +78,5 @@ var HELLO_COMPONENT = "\
}
});
React.render(<HTMLtoJSXComponent />, document.getElementById('jsxCompiler'));
ReactDOM.render(<HTMLtoJSXComponent />, document.getElementById('jsxCompiler'));
}());

View File

@@ -11,24 +11,24 @@ var IS_MOBILE = (
var CodeMirrorEditor = React.createClass({
propTypes: {
lineNumbers: React.PropTypes.bool,
onChange: React.PropTypes.func
onChange: React.PropTypes.func,
},
getDefaultProps: function() {
return {
lineNumbers: false
lineNumbers: false,
};
},
componentDidMount: function() {
if (IS_MOBILE) return;
this.editor = CodeMirror.fromTextArea(React.findDOMNode(this.refs.editor), {
this.editor = CodeMirror.fromTextArea(ReactDOM.findDOMNode(this.refs.editor), {
mode: 'javascript',
lineNumbers: this.props.lineNumbers,
lineWrapping: true,
smartIndent: false, // javascript mode does bad things with jsx indents
matchBrackets: true,
theme: 'solarized-light',
readOnly: this.props.readOnly
readOnly: this.props.readOnly,
});
this.editor.on('change', this.handleChange);
},
@@ -60,7 +60,7 @@ var CodeMirrorEditor = React.createClass({
{editor}
</div>
);
}
},
});
var selfCleaningTimeout = {
@@ -71,7 +71,7 @@ var selfCleaningTimeout = {
setTimeout: function() {
clearTimeout(this.timeoutID);
this.timeoutID = setTimeout.apply(null, arguments);
}
},
};
var ReactPlayground = React.createClass({
@@ -85,7 +85,7 @@ var ReactPlayground = React.createClass({
renderCode: React.PropTypes.bool,
showCompiledJSTab: React.PropTypes.bool,
showLineNumbers: React.PropTypes.bool,
editorTabTitle: React.PropTypes.string
editorTabTitle: React.PropTypes.string,
},
getDefaultProps: function() {
@@ -95,7 +95,7 @@ var ReactPlayground = React.createClass({
},
editorTabTitle: 'Live JSX Editor',
showCompiledJSTab: true,
showLineNumbers: false
showLineNumbers: false,
};
},
@@ -194,16 +194,16 @@ var ReactPlayground = React.createClass({
},
executeCode: function() {
var mountNode = React.findDOMNode(this.refs.mount);
var mountNode = ReactDOM.findDOMNode(this.refs.mount);
try {
React.unmountComponentAtNode(mountNode);
ReactDOM.unmountComponentAtNode(mountNode);
} catch (e) { }
try {
var compiledCode = this.compileCode();
if (this.props.renderCode) {
React.render(
ReactDOM.render(
<CodeMirrorEditor codeText={compiledCode} readOnly={true} />,
mountNode
);
@@ -212,11 +212,11 @@ var ReactPlayground = React.createClass({
}
} catch (err) {
this.setTimeout(function() {
React.render(
ReactDOM.render(
<div className="playgroundError">{err.toString()}</div>,
mountNode
);
}, 500);
}
}
},
});

View File

@@ -20,19 +20,20 @@
<link rel="stylesheet" href="/react/css/codemirror.css">
<link rel="stylesheet" href="/react/css/react.css">
<script type="text/javascript" src="//use.typekit.net/vqa1hcx.js"></script>
<script type="text/javascript">try{Typekit.load();}catch(e){}</script>
<script src="//use.typekit.net/vqa1hcx.js"></script>
<script>try{Typekit.load();}catch(e){}</script>
<!--[if lte IE 8]>
<script type="text/javascript" src="/react/js/html5shiv.min.js"></script>
<script type="text/javascript" src="/react/js/es5-shim.min.js"></script>
<script type="text/javascript" src="/react/js/es5-sham.min.js"></script>
<script src="/react/js/html5shiv.min.js"></script>
<script src="/react/js/es5-shim.min.js"></script>
<script src="/react/js/es5-sham.min.js"></script>
<![endif]-->
<script type="text/javascript" src="/react/js/babel-browser.min.js"></script>
<script type="text/javascript" src="/react/js/codemirror.js"></script>
<script type="text/javascript" src="/react/js/javascript.js"></script>
<script type="text/javascript" src="/react/js/react.js"></script>
<script type="text/javascript" src="/react/js/live_editor.js"></script>
<script src="/react/js/codemirror.js"></script>
<script src="/react/js/javascript.js"></script>
<script src="/react/js/react.js"></script>
<script src="/react/js/react-dom.js"></script>
<script src="/react/js/babel-browser.min.js"></script>
<script src="/react/js/live_editor.js"></script>
</head>
<body>

22
docs/_plugins/authors.rb Normal file
View File

@@ -0,0 +1,22 @@
# This transforms the data associated with each post, specifically the author.
# We store our author information in a yaml file and specify the keys in The
# post front matter. Instead of looking up the complete data each time we need
# it, we'll just look it up here and assign. This plays nicely with tools like
# jekyll-feed which expect post.author to be in a specific format.
module Authors
class Generator < Jekyll::Generator
def generate(site)
site.posts.each do |post|
authors = []
if post['author'].kind_of?(Array)
for author in post['author']
authors.push(site.data['authors'][author])
end
else
authors.push(site.data['authors'][post['author']])
end
post.data['authors'] = authors
end
end
end
end

View File

@@ -33,7 +33,7 @@ There are other features of ES6 we're already using in core. I'm sure we'll see
## Context
While we haven't documented `context`, it exists in some form in React already. It exists as a way to pass values through a tree without having to use props at every single point. We've seen this need crop up time and time again, so we want to make this as easy as possible. It's use has performance tradeoffs, and there are known weaknesses in our implementation, so we want to make sure this is a solid feature.
While we haven't documented `context`, it exists in some form in React already. It exists as a way to pass values through a tree without having to use props at every single point. We've seen this need crop up time and time again, so we want to make this as easy as possible. Its use has performance tradeoffs, and there are known weaknesses in our implementation, so we want to make sure this is a solid feature.
## Addons

View File

@@ -1,6 +1,6 @@
---
title: "Flux: An Application Architecture for React"
author: fisherwebdevandjing
author: [fisherwebdev, jingc]
---
We recently spoke at one of f8's breakout session about Flux, a data flow architecture that works well with React. Check out the video here:

View File

@@ -77,7 +77,7 @@ We believe there are a number of weakness in typical REST systems, ones that are
* Fetching complicated object graphs require multiple round trips between the client and server to render single views. For mobile applications operating in variable network conditions, these multiple roundtrips are highly undesirable.
* Invariably fields and additional data are added to REST endpoints as the system requirements change. However, old clients also receive this additional data as well, because the data fetching specification is encoded on the server rather than the client. As result, these payloads tend to grow over time for all clients. When this becomes a problem for a system, one solution is to overlay a versioning system onto the REST endpoints. Versioning also complicates a server, and results in code duplication, spaghetti code, or a sophisticated, hand-rolled infrastructure to manage it. Another solution to limit over-fetching is to provide multiple views such as “compact” vs “full” of the same REST endpoint, however this coarse granularity often does not offer adequate flexibility.
* REST endpoints are usually weakly-typed and lack machine-readable metadata. While there is much debate about the merits of strong- versus weak-typing in distributed systems, we believe in strong typing because of the correctness guarantees and tooling opportunities it provides. Developer deal with systems that lack this metadata by inspecting frequently out-of-date documentation and then writing code against the documentation.
* REST endpoints are usually weakly-typed and lack machine-readable metadata. While there is much debate about the merits of strong- versus weak-typing in distributed systems, we believe in strong typing because of the correctness guarantees and tooling opportunities it provides. Developers deal with systems that lack this metadata by inspecting frequently out-of-date documentation and then writing code against the documentation.
* Many of these attributes are linked to the fact that “REST is intended for long-lived network-based applications that span multiple organizations” [according to its inventor](http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven). This is not a requirement for APIs that serve a client app built within the same organization.
Nearly all externally facing REST APIs we know of trend or end up in these non-ideal states, as well as nearly all *internal* REST APIs. The consequences of opaqueness and over-fetching are more severe in internal APIs since their velocity of change and level of usage is almost always higher.
@@ -90,7 +90,7 @@ Because of multiple round-trips and over-fetching, applications built in the RES
Many applications have no formalized client-server contract. Product developers access server capabilities through *ad hoc* endpoints and write custom code to fetch the data they need. Servers define procedures, and they return data. This approach has the virtue of simplicity, but can often become untenable as systems age.
* These systems typically define a custom endpoint per view. For systems with a wide surface area this can quickly grow into a maintenance nightmare of orphaned endpoints, inconsistent tooling, and massive server code duplication. Disciplined engineering organizations can mitigate these issues with great engineering practices, high quality abstractions, and custom tooling. However, given our experience we believe that custom endpoints tend to lead to entropic server codebases.
* Much like REST, the payloads of custom endpoints grow monotonically (even with mitigation from versioning systems) as the server evolves. Deployed clients cannot break, and, with rapid release cycles and backwards compatibility guarantees, distributed applications will have large numbers of extant versions. Under these constraints it is difficult remove data from a custom endpoint.
* Much like REST, the payloads of custom endpoints grow monotonically (even with mitigation from versioning systems) as the server evolves. Deployed clients cannot break, and, with rapid release cycles and backwards compatibility guarantees, distributed applications will have large numbers of extant versions. Under these constraints it is difficult to remove data from a custom endpoint.
* Custom endpoints tend to for a client developer create a clunky, multi-language, multi-environment development process. No matter if the data has been accessed before in a different view, they are required to first change the custom endpoint, then deploy that code to a server accessible from a mobile device, and only then change the client to utilize that data. In GraphQL unless the data in the view is completely new to the entire system a product developer adds a field to a GraphQL query and the work on the client continues unabated.
* Much like REST, most systems with custom endpoints do not have a formalized type system, which eliminates the possibility for the tools and guarantees that introspective type systems can provide. Some custom-endpoint-driven systems do use a strongly typed serialization scheme, such as Protocol Buffers, Thrift, or XML. Those do allow for direct parsing of responses into typed classes and eliminating boilerplate shuffling from JSON into handwritten classes. These systems are as not as expressive and flexible as GraphQL, and the other downsides of *ad hoc* endpoints remain.

View File

@@ -28,7 +28,7 @@ If you cant use `npm` yet, we also provide pre-built browser builds for your
Dev build with warnings: <https://fb.me/react-dom-0.14.0-rc1.js>
Minified build for production: <https://fb.me/react-dom-0.14.0-rc1.min.js>
These builds are also available in the `react` and `react-dom` packages on bower.
These builds are also available in the `react` package on bower.
## Changelog
@@ -57,7 +57,7 @@ These builds are also available in the `react` and `react-dom` packages on bower
ReactDOM.render(<MyComponent />, node);
```
Weve published the [automated codemod script](https://github.com/facebook/react/blob/master/packages/react-codemod/README.md) we used at Facebook to help you with this transition.
Weve published the [automated codemod script](https://github.com/reactjs/react-codemod/blob/master/README.md) we used at Facebook to help you with this transition.
The add-ons have moved to separate packages as well: `react-addons-clone-with-props`, `react-addons-create-fragment`, `react-addons-css-transition-group`, `react-addons-linked-state-mixin`, `react-addons-perf`, `react-addons-pure-render-mixin`, `react-addons-shallow-compare`, `react-addons-test-utils`, `react-addons-transition-group`, and `react-addons-update`, plus `ReactDOM.unstable_batchedUpdates` in `react-dom`.

View File

@@ -1,6 +1,6 @@
---
title: "React.render and the Top Level React API"
author: jimandsebastian
title: "ReactDOM.render and the Top Level React API"
author: ["jimfb", "sebmarkbage"]
---

View File

@@ -0,0 +1,203 @@
---
title: "React v0.14"
author: spicyj
---
Were happy to announce the release of React 0.14 today! This release has a few major changes, primarily designed to simplify the code you write every day and to better support environments like React Native.
If you tried the release candidate, thank you your support is invaluable and we've fixed a few bugs that you reported.
As with all of our releases, we consider this version to be stable enough to use in production and recommend that you upgrade in order to take advantage of our latest improvements.
## Upgrade Guide
Like always, we have a few breaking changes in this release. We know changes can be painful (the Facebook codebase has over 15,000 React components), so we always try to make changes gradually in order to minimize the pain.
If your code is free of warnings when running under React 0.13, upgrading should be easy. We have two new small breaking changes that didn't give a warning in 0.13 (see below). Every new change in 0.14, including the major changes below, is introduced with a runtime warning and will work as before until 0.15, so you don't have to worry about your app breaking with this upgrade.
For the two major changes which require significant code changes, we've included [codemod scripts](https://github.com/reactjs/react-codemod/blob/master/README.md) to help you upgrade your code automatically.
See the changelog below for more details.
## Installation
We recommend using React from `npm` and using a tool like browserify or webpack to build your code into a single bundle. To install the two packages:
* `npm install --save react react-dom`
Remember that by default, React runs extra checks and provides helpful warnings in development mode. When deploying your app, set the `NODE_ENV` environment variable to `production` to use the production build of React which does not include the development warnings and runs significantly faster.
If you cant use `npm` yet, we provide pre-built browser builds for your convenience, which are also available in the `react` package on bower.
* **React**
Dev build with warnings: <https://fb.me/react-0.14.0.js>
Minified build for production: <https://fb.me/react-0.14.0.min.js>
* **React with Add-Ons**
Dev build with warnings: <https://fb.me/react-with-addons-0.14.0.js>
Minified build for production: <https://fb.me/react-with-addons-0.14.0.min.js>
* **React DOM** (include React in the page before React DOM)
Dev build with warnings: <https://fb.me/react-dom-0.14.0.js>
Minified build for production: <https://fb.me/react-dom-0.14.0.min.js>
## Changelog
### Major changes
- #### Two Packages: React and React DOM
As we look at packages like [react-native](https://github.com/facebook/react-native), [react-art](https://github.com/reactjs/react-art), [react-canvas](https://github.com/Flipboard/react-canvas), and [react-three](https://github.com/Izzimach/react-three), it has become clear that the beauty and essence of React has nothing to do with browsers or the DOM.
To make this more clear and to make it easier to build more environments that React can render to, were splitting the main `react` package into two: `react` and `react-dom`. **This paves the way to writing components that can be shared between the web version of React and React Native.** We dont expect all the code in an app to be shared, but we want to be able to share the components that do behave the same across platforms.
The `react` package contains `React.createElement`, `.createClass`, `.Component`, `.PropTypes`, `.Children`, and the other helpers related to elements and component classes. We think of these as the [_isomorphic_](http://nerds.airbnb.com/isomorphic-javascript-future-web-apps/) or [_universal_](https://medium.com/@mjackson/universal-javascript-4761051b7ae9) helpers that you need to build components.
The `react-dom` package has `ReactDOM.render`, `.unmountComponentAtNode`, and `.findDOMNode`. In `react-dom/server` we have server-side rendering support with `ReactDOMServer.renderToString` and `.renderToStaticMarkup`.
```js
var React = require('react');
var ReactDOM = require('react-dom');
var MyComponent = React.createClass({
render: function() {
return <div>Hello World</div>;
}
});
ReactDOM.render(<MyComponent />, node);
```
The old names will continue to work with a warning until 0.15 is released, and weve published the [automated codemod script](https://github.com/reactjs/react-codemod/blob/master/README.md) we used at Facebook to help you with this transition.
The add-ons have moved to separate packages as well:
- `react-addons-clone-with-props`
- `react-addons-create-fragment`
- `react-addons-css-transition-group`
- `react-addons-linked-state-mixin`
- `react-addons-perf`
- `react-addons-pure-render-mixin`
- `react-addons-shallow-compare`
- `react-addons-test-utils`
- `react-addons-transition-group`
- `react-addons-update`
- `ReactDOM.unstable_batchedUpdates` in `react-dom`.
For now, please use matching versions of `react` and `react-dom` (and the add-ons, if you use them) in your apps to avoid versioning problems.
- #### DOM node refs
The other big change were making in this release is exposing refs to DOM components as the DOM node itself. That means: we looked at what you can do with a `ref` to a React DOM component and realized that the only useful thing you can do with it is call `this.refs.giraffe.getDOMNode()` to get the underlying DOM node. Starting with this release, `this.refs.giraffe` _is_ the actual DOM node. **Note that refs to custom (user-defined) components work exactly as before; only the built-in DOM components are affected by this change.**
```js
var Zoo = React.createClass({
render: function() {
return <div>Giraffe name: <input ref="giraffe" /></div>;
},
showName: function() {
// Previously: var input = this.refs.giraffe.getDOMNode();
var input = this.refs.giraffe;
alert(input.value);
}
});
```
This change also applies to the return result of `ReactDOM.render` when passing a DOM node as the top component. As with refs, this change does not affect custom components.
With this change, were deprecating `.getDOMNode()` and replacing it with `ReactDOM.findDOMNode` (see below). If your components are currently using `.getDOMNode()`, they will continue to work with a warning until 0.15.
- #### Stateless functional components
In idiomatic React code, most of the components you write will be stateless, simply composing other components. Were introducing a new, simpler syntax for these components where you can take `props` as an argument and return the element you want to render:
```js
// A functional component using an ES2015 (ES6) arrow function:
var Aquarium = (props) => {
var fish = getFish(props.species);
return <Tank>{fish}</Tank>;
};
// Or with destructuring and an implicit return, simply:
var Aquarium = ({species}) => (
<Tank>
{getFish(species)}
</Tank>
);
// Then use: <Aquarium species="rainbowfish" />
```
These components behave just like a React class with only a `render` method defined. Since no component instance is created for a functional component, any `ref` added to one will evaluate to `null`. Functional components do not have lifecycle methods, but you can set `.propTypes` and `.defaultProps` as properties on the function.
This pattern is designed to encourage the creation of these simple components that should comprise large portions of your apps. In the future, well also be able to make performance optimizations specific to these components by avoiding unnecessary checks and memory allocations.
- #### Deprecation of react-tools
The `react-tools` package and `JSXTransformer.js` browser file [have been deprecated](/react/blog/2015/06/12/deprecating-jstransform-and-react-tools.html). You can continue using version `0.13.3` of both, but we no longer support them and recommend migrating to [Babel](http://babeljs.io/), which has built-in support for React and JSX.
- #### Compiler optimizations
React now supports two compiler optimizations that can be enabled in Babel 5.8.24 and newer. Both of these transforms **should be enabled only in production** (e.g., just before minifying your code) because although they improve runtime performance, they make warning messages more cryptic and skip important checks that happen in development mode, including propTypes.
**Inlining React elements:** The `optimisation.react.inlineElements` transform converts JSX elements to object literals like `{type: 'div', props: ...}` instead of calls to `React.createElement`.
**Constant hoisting for React elements:** The `optimisation.react.constantElements` transform hoists element creation to the top level for subtrees that are fully static, which reduces calls to `React.createElement` and the resulting allocations. More importantly, it tells React that the subtree hasnt changed so React can completely skip it when reconciling.
### Breaking changes
In almost all cases, we change our APIs gradually and warn for at least one release to give you time to clean up your code. These two breaking changes did not have a warning in 0.13 but should be easy to find and clean up:
- `React.initializeTouchEvents` is no longer necessary and has been removed completely. Touch events now work automatically.
- Add-Ons: Due to the DOM node refs change mentioned above, `TestUtils.findAllInRenderedTree` and related helpers are no longer able to take a DOM component, only a custom component.
These three breaking changes had a warning in 0.13, so you shouldnt have to do anything if your code is already free of warnings:
- The `props` object is now frozen, so mutating props after creating a component element is no longer supported. In most cases, [`React.cloneElement`](/react/docs/top-level-api.html#react.cloneelement) should be used instead. This change makes your components easier to reason about and enables the compiler optimizations mentioned above.
- Plain objects are no longer supported as React children; arrays should be used instead. You can use the [`createFragment`](/react/docs/create-fragment.html) helper to migrate, which now returns an array.
- Add-Ons: `classSet` has been removed. Use [classnames](https://github.com/JedWatson/classnames) instead.
### New deprecations, introduced with a warning
Each of these changes will continue to work as before with a new warning until the release of 0.15 so you can upgrade your code gradually.
- Due to the DOM node refs change mentioned above, `this.getDOMNode()` is now deprecated and `ReactDOM.findDOMNode(this)` can be used instead. Note that in most cases, calling `findDOMNode` is now unnecessary see the example above in the “DOM node refs” section.
With each returned DOM node, we've added a `getDOMNode` method for backwards compatibility that will work with a warning until 0.15. If you have a large codebase, you can use our [automated codemod script](https://github.com/reactjs/react-codemod/blob/master/README.md) to change your code automatically.
- `setProps` and `replaceProps` are now deprecated. Instead, call ReactDOM.render again at the top level with the new props.
- ES6 component classes must now extend `React.Component` in order to enable stateless function components. The [ES3 module pattern](/react/blog/2015/01/27/react-v0.13.0-beta-1.html#other-languages) will continue to work.
- Reusing and mutating a `style` object between renders has been deprecated. This mirrors our change to freeze the `props` object.
- Add-Ons: `cloneWithProps` is now deprecated. Use [`React.cloneElement`](/react/docs/top-level-api.html#react.cloneelement) instead (unlike `cloneWithProps`, `cloneElement` does not merge `className` or `style` automatically; you can merge them manually if needed).
- Add-Ons: To improve reliability, `CSSTransitionGroup` will no longer listen to transition events. Instead, you should specify transition durations manually using props such as `transitionEnterTimeout={500}`.
### Notable enhancements
- Added `React.Children.toArray` which takes a nested children object and returns a flat array with keys assigned to each child. This helper makes it easier to manipulate collections of children in your `render` methods, especially if you want to reorder or slice `this.props.children` before passing it down. In addition, `React.Children.map` now returns plain arrays too.
- React uses `console.error` instead of `console.warn` for warnings so that browsers show a full stack trace in the console. (Our warnings appear when you use patterns that will break in future releases and for code that is likely to behave unexpectedly, so we do consider our warnings to be “must-fix” errors.)
- Previously, including untrusted objects as React children [could result in an XSS security vulnerability](http://danlec.com/blog/xss-via-a-spoofed-react-element). This problem should be avoided by properly validating input at the application layer and by never passing untrusted objects around your application code. As an additional layer of protection, [React now tags elements](https://github.com/facebook/react/pull/4832) with a specific [ES2015 (ES6) `Symbol`] (http://www.2ality.com/2014/12/es6-symbols.html) in browsers that support it, in order to ensure that React never considers untrusted JSON to be a valid element. If this extra security protection is important to you, you should add a `Symbol` polyfill for older browsers, such as the one included by [Babels polyfill](http://babeljs.io/docs/usage/polyfill/).
- When possible, React DOM now generates XHTML-compatible markup.
- React DOM now supports these standard HTML attributes: `capture`, `challenge`, `inputMode`, `is`, `keyParams`, `keyType`, `minLength`, `summary`, `wrap`. It also now supports these non-standard attributes: `autoSave`, `results`, `security`.
- React DOM now supports these SVG attributes, which render into namespaced attributes: `xlinkActuate`, `xlinkArcrole`, `xlinkHref`, `xlinkRole`, `xlinkShow`, `xlinkTitle`, `xlinkType`, `xmlBase`, `xmlLang`, `xmlSpace`.
- The `image` SVG tag is now supported by React DOM.
- In React DOM, arbitrary attributes are supported on custom elements (those with a hyphen in the tag name or an `is="..."` attribute).
- React DOM now supports these media events on `audio` and `video` tags: `onAbort`, `onCanPlay`, `onCanPlayThrough`, `onDurationChange`, `onEmptied`, `onEncrypted`, `onEnded`, `onError`, `onLoadedData`, `onLoadedMetadata`, `onLoadStart`, `onPause`, `onPlay`, `onPlaying`, `onProgress`, `onRateChange`, `onSeeked`, `onSeeking`, `onStalled`, `onSuspend`, `onTimeUpdate`, `onVolumeChange`, `onWaiting`.
- Many small performance improvements have been made.
- Many warnings show more context than before.
- Add-Ons: A [`shallowCompare`](https://github.com/facebook/react/pull/3355) add-on has been added as a migration path for `PureRenderMixin` in ES6 classes.
- Add-Ons: `CSSTransitionGroup` can now use [custom class names](https://github.com/facebook/react/blob/48942b85/docs/docs/10.1-animation.md#custom-classes) instead of appending `-enter-active` or similar to the transition name.
### New helpful warnings
- React DOM now warns you when nesting HTML elements invalidly, which helps you avoid surprising errors during updates.
- Passing `document.body` directly as the container to `ReactDOM.render` now gives a warning as doing so can cause problems with browser extensions that modify the DOM.
- Using multiple instances of React together is not supported, so we now warn when we detect this case to help you avoid running into the resulting problems.
### Notable bug fixes
- Click events are handled by React DOM more reliably in mobile browsers, particularly in Mobile Safari.
- SVG elements are created with the correct namespace in more cases.
- React DOM now renders `<option>` elements with multiple text children properly and renders `<select>` elements on the server with the correct option selected.
- When two separate copies of React add nodes to the same document (including when a browser extension uses React), React DOM tries harder not to throw exceptions during event handling.
- Using non-lowercase HTML tag names in React DOM (e.g., `React.createElement('DIV')`) no longer causes problems, though we continue to recommend lowercase for consistency with the JSX tag name convention (lowercase names refer to built-in components, capitalized names refer to custom components).
- React DOM understands that these CSS properties are unitless and does not append “px” to their values: `animationIterationCount`, `boxOrdinalGroup`, `flexOrder`, `tabSize`, `stopOpacity`.
- Add-Ons: When using the test utils, `Simulate.mouseEnter` and `Simulate.mouseLeave` now work.
- Add-Ons: ReactTransitionGroup now correctly handles multiple nodes being removed simultaneously.

View File

@@ -0,0 +1,86 @@
---
title: "Reactiflux is moving to Discord"
author: benigeri
---
TL;DR: Slack decided that Reactiflux had too many members and disabled new invites. Reactiflux is moving to Discord. Join us: [http://join.reactiflux.com](http://join.reactiflux.com/)
## What happened with Slack?
A few weeks ago, Reactiflux reached 7,500 members on Slack. Shortly after, Slack decided we were too big and disabled invites. There was no way for new users to join. Many of us were sad and upset. We loved Slack. Our community was built around it.
We reached out to Slack several times, but their decision was firm. Our large community caused performance issues. Slack wants to focus on building a great product for teams, not necessarily large open communities. Losing focus and building for too many use cases always leads to product bloat, and eventually a decrease in quality.
## So… why Discord?
After a [long and thorough debate](https://github.com/reactiflux/volunteers/issues/25), Discord quickly emerged as the most promising service. After just a few days, 400 members had joined the Discord server, and many already loved it.
### Easiest to join
Discord is the easiest platform to join. New users can immediately join our conversations without having to create an account. All they need to do is provide a name. No permission granting, no password, no email confirmation.
This is critically useful for us, and will make Reactiflux even more open and accessible.
### Great apps
Out of all of the services weve tried, Discords apps are by far the most polished. They are well designed, easy to use, and surprisingly fast. In addition to the web app, they have mobile apps on both iOS and Android as well as desktop apps for OS X and Windows, with Linux support coming soon.
Their desktop apps are built with React and Electron, and their iOS app is built with React Native.
### Moderation tools
So far, weve been fortunate not to have to deal with spammers and trolls. As our community continues to grow, that might change. Unsurprisingly, Discord is the only app weve seen with legitimate moderation tools. It was built for gaming communities, after all.
### Great multiple Server support
Your Discord account works with every Discord server, which is the equivalent of a Slack team. You dont need to create a new account every time you join a new team. You can join new servers in one click, and its very easy to switch between them. Discord messages also work across servers, so your personal conversations are not scoped to a single server.
Instead of having one huge, crowded Reactiflux server, we can branch off closely related channels into sub-servers. Communities will start overlapping, and it will be easy to interact with non-Reactiflux channels.
### Its hosted
Self-hosted apps require maintenance. Were all busy, and we can barely find the time to keep our landing page up to date and running smoothly. More than anything, we need a stable platform, and we dont have the resources to guarantee that right now.
Its a much safer bet to offload the hosting to Discord, who is already keeping the lights on for all their users.
### We like the team
And they seem to like us back. They are excited for us to join them, and theyve been very responsive to our feedback and suggestions.
They implemented code syntax highlighting just a few days after we told them we needed it.
Discords team has already built a solid suite of apps, and they have shown us how much they care about their users. Were excited to see how they will continue to improve their product.
## And whats the catch?
Choosing the best chat service is subjective. There are a million reasons why Discord *might be* a terrible idea. Here are the ones that were most worried about:
### Difficult channel management
Channel management seems to be the biggest issue. There is no way to opt out of channels; you can only mute them. And you can only mute channels one by one. There is no way to star channels, and channels can only be sorted on the server level. Each user will see the list of channels in the same order.
As the number of channels grow, it will be challenging to keep things in order. Branching off sub-servers will help, and we will keep an easily accessible directory of channels across our main server and all of the sub-servers.
We can build simple tools to make channel lookup easier, and the Discord team is working on improvements that should make this more manageable.
### No Search
Lack of search is clearly a bummer, but Discord is working on it. Search is coming!
### Firewall
A couple of users arent able to access Discord at work since other corporate filters classify it as a gaming application. This sucks, but it seems to be a rare case. So far, it seems only to affect 0.6% of our current community (3/500).
We hope that these users can get Discord's domains whitelisted, and well try to find a solution if this is a widespread issue. The Discord team is aware of the issue as well.
## Is Discord going to disappear tomorrow?
Probably not tomorrow. They have 14 people [full time](https://discordapp.com/company), and theyve raised money from some of the best investors in Silicon Valley, including [Benchmark](http://www.benchmark.com/) and [Accel](http://www.accel.com/companies/).
By focusing on gaming communities, Discord has differentiated itself from the many other communication apps. Discord is well received and has a rapidly growing user base. They plan to keep their basic offerings free for unlimited users and hope to make money with premium offerings (themes, add-ons, content, and more).
## Join us!
More than 500 of us have already migrated to the new Reactiflux. Join us, we're one click away: [http://join.reactiflux.com](http://join.reactiflux.com/)
*Note: Jordan Hawkers thorough [research](http://jhawk.co/team-chat-comparison) made our decision a lot easier.*

View File

@@ -0,0 +1,40 @@
---
title: "React v0.14.1"
author: zpao
---
After a couple weeks of having more people use v0.14, we're ready to ship a patch release addressing a few issues. Thanks to everybody who has reported issues and written patches!
The release is now available for download:
* **React**
Dev build with warnings: <https://fb.me/react-0.14.1.js>
Minified build for production: <https://fb.me/react-0.14.1.min.js>
* **React with Add-Ons**
Dev build with warnings: <https://fb.me/react-with-addons-0.14.1.js>
Minified build for production: <https://fb.me/react-with-addons-0.14.1.min.js>
* **React DOM** (include React in the page before React DOM)
Dev build with warnings: <https://fb.me/react-dom-0.14.1.js>
Minified build for production: <https://fb.me/react-dom-0.14.1.min.js>
We've also published version `0.14.1` of the `react`, `react-dom`, and addons packages on npm and the `react` package on bower.
- - -
## Changelog
### React DOM
- Fixed bug where events wouldn't fire in old browsers when using React in development mode
- Fixed bug preventing use of `dangerouslySetInnerHTML` with Closure Compiler Advanced mode
- Added support for `srcLang`, `default`, and `kind` attributes for `<track>` elements
- Added support for `color` attribute
- Ensured legacy `.props` access on DOM nodes is updated on re-renders
### React TestUtils Add-on
- Fixed `scryRenderedDOMComponentsWithClass` so it works with SVG
### React CSSTransitionGroup Add-on
- Fix bug preventing `0` to be used as a timeout value
### React on Bower
- Added `react-dom.js` to `main` to improve compatibility with tooling

View File

@@ -9,8 +9,12 @@ id: all-posts
<div class="inner-content">
<h1>All Posts</h1>
{% for page in site.posts %}
{% assign author = site.data.authors[page.author] %}
<p><strong><a href="/react{{ page.url }}">{{ page.title }}</a></strong> on {{ page.date | date: "%B %e, %Y" }} by {{ author.name }}</p>
<p><strong><a href="/react{{ page.url }}">{{ page.title }}</a></strong> on {{ page.date | date: "%B %e, %Y" }} by
{% for author in page.authors %}
{{ author.name }}
{% if forloop.last == false %} and {% endif %}
{% endfor %}
</p>
{% endfor %}
</div>
</section>

View File

@@ -390,6 +390,38 @@ h1, h2, h3, h4, h5, h6 {
@include clearfix;
}
/* JSX Compiler */
.jsxCompiler {
margin: 0 auto;
padding-top: 20px;
width: 1220px;
label.compiler-option {
display: block;
margin-top: 5px;
}
#jsxCompiler {
margin-top: 20px;
}
.playgroundPreview {
padding: 0;
width: 600px;
pre {
@include code-typography;
}
}
.playgroundError {
// The compiler view kills padding in order to render the CodeMirror code
// more nicely. For the error view, put a padding back
padding: 15px 20px;
}
}
.docs-prev {
float: left;
}

View File

@@ -0,0 +1,28 @@
---
id: why-react-de-DE
title: Warum React?
permalink: why-react-de-DE.html
---
React ist eine JavaScript-Bibliothek von Facebook und Instagram für Benutzeroberflächen. Man kann sich React als das **V** in **[MVC](https://de.wikipedia.org/wiki/Model_View_Controller)** vorstellen.
Wir haben React für folgende Aufgabe entwickelt: **umfangreiche Anwendungen zu bauen, deren Daten sich zeitlich ändern**.
## Einfach
Beschreibe, wie sich Deine App zu jedem gewünschten Zeitpunkt präsentieren soll und React kümmert sich um alle Benutzeroberflächen-Änderungen sobald sich die zugrundeliegenden Daten ändern.
## Deklarativ
Bei Datenveränderungen drückt React bildlich die "Aktualisieren"-Taste und versteht sich darauf, nur die veränderten Elemente zu erneuern.
## Baue zusammensetzbare Komponenten
React unterstützt die Entwicklung wiederverwendbarer Komponenten. Tatsächlich machst Du in React nichts anderes, als Komponenten zu bauen. Dank ihrer Kapselung erleichtern Komponenten die Wiederverwendung und das Testen von Code sowie die Trennung der Belange.
## Gib' ihnen fünf Minuten
React hinterfragt eine ganze Reihe konventioneller Standpunkte. Auf den ersten Blick mögen einige Ideen verrückt klingen. [Gib' ihnen fünf Minuten](https://signalvnoise.com/posts/3124-give-it-five-minutes) während Du diese Anleitung liest; diese verrückten Ideen halfen dabei, tausende von Komponenten innerhalb und außerhalb von Facebook und Instagram zu entwickeln.
## Erfahre mehr
Erfahre mehr über unsere Motivation zur Entwicklung von React in [diesem Blogeintrag](/react/blog/2013/06/05/why-react.html).

View File

@@ -0,0 +1,29 @@
---
id: why-react-it-IT
title: Perché React?
permalink: why-react-it-IT.html
next: displaying-data-it-IT.html
---
React è una libreria JavaScript per creare interfacce utente scritta da Facebook e Instagram. A molti piace pensare a React come alla **V** di **[MVC](https://it.wikipedia.org/wiki/Model-View-Controller)**.
Abbiamo costruito React per risolvere un problema: **costruire applicazioni di grandi dimensioni con dati che cambiano nel tempo**.
## Semplice
Dichiara semplicemente come la tua app debba apparire in ogni istante, e React gestirà automaticamente tutti gli aggiornamenti della UI quando i dati sottostanti cambiano.
## Dichiarativo
Quando i dati cambiano, React preme idealmente il bottone "aggiorna", e sa come aggiornare soltanto le parti che sono cambiate.
## Costruisci Componenti Componibili
React è basato interamente sulla costruzione di componenti riutilizzabili. Infatti, con React l'*unica* cosa che fai è costruire componenti. Dal momento che sono così incapsulati, i componenti facilitano il riutilizzo del codice, la verifica e la separazione dei concetti.
## Dagli Cinque Minuti
React sfida molte convenzioni, e a prima vista alcune delle idee potrebbero sembrare folli. [Dagli cinque minuti](https://signalvnoise.com/posts/3124-give-it-five-minutes) mentre leggi questa guida; quelle idee folli hanno funzionato per costruire migliaia di componenti sia dentro che fuori da Facebook e Instagram.
## Per Approfondire
Puoi approfondire le nostre motivazioni per la costruzione di React leggendo [questo articolo del blog](/react/blog/2013/06/05/why-react.html).

View File

@@ -5,13 +5,13 @@ permalink: why-react-zh-CN.html
next: displaying-data-zh-CN.html
---
React 是一个 Facebook 和 Instagram 用来创建用户界面的 JavaScript 库。很人多认为 React 是 **[MVC](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller)** 中的 **V**(视图)。
React 是一个 Facebook 和 Instagram 用来创建用户界面的 JavaScript 库。很多人选择将 React 认为**[MVC](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller)** 中的 **V**(视图)。
我们创造 React 是为了解决一个问题:**构建随着时间数据不断变化的大规模应用程序**。
### 简单
仅仅只要表达出你的应用程序在任一个时间点应该的样子然后当底层的数据变了React 会自动处理所有用户界面的更新。
仅仅只要表达出你的应用程序在任一个时间点应该呈现的样子然后当底层的数据变了React 会自动处理所有用户界面的更新。
### 声明式 (Declarative)

View File

@@ -0,0 +1,128 @@
---
id: displaying-data-it-IT
title: Visualizzare Dati
permalink: displaying-data-it-IT.html
prev: why-react-it-IT.html
next: jsx-in-depth-it-IT.html
---
L'attività più basilare che puoi effettuare con una UI è mostrare dei dati. React rende visualizzare dati semplice e mantiene automaticamente l'interfaccia aggiornata quando i dati cambiano.
## Per Cominciare
Diamo un'occhiata ad un esempio davvero semplice. Creiamo un file dal nome `hello-react.html` con il codice seguente:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Hello React</title>
<script src="https://fb.me/react-{{site.react_version}}.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.23/browser.min.js"></script>
</head>
<body>
<div id="example"></div>
<script type="text/babel">
// ** Il tuo codice va qui! **
</script>
</body>
</html>
```
Nel resto della documentazione, ci concentreremo soltanto sul codice JavaScript e assumeremo che sia inserito in un modello come quello qui sopra. Sostituisci il commento segnaposto qui sopra con il seguente codice JSX:
```javascript
var HelloWorld = React.createClass({
render: function() {
return (
<p>
Ciao, <input type="text" placeholder="Scrivi il tuo nome" />!
È il {this.props.date.toTimeString()}
</p>
);
}
});
setInterval(function() {
ReactDOM.render(
<HelloWorld date={new Date()} />,
document.getElementById('example')
);
}, 500);
```
## Aggiornamenti Reattivi
Apri `hello-react.html` in un browser web e scrivi il tuo nome nel campo di testo. Osserva che React cambia soltanto la stringa di testo dell'ora nella UI — ogni input che inserisci nel campo di testo rimane, anche se non hai scritto alcun codice che gestisce questo comportamento. React lo capisce da solo al tuo posto e fa la cosa giusta.
La maniera in cui siamo in grado di capirlo è che React non manipola il DOM a meno che non sia necessario. **Utilizza un DOM interno fittizio e veloce per effettuare confronti ed effettuare le mutazioni del DOM più efficienti al tuo posto.**
Gli input di questo componente sono chiamati `props` — breve per "properties". Sono passati come attributi nella sintassi JSX. Puoi pensare ad essi come immutabili nel contesto del componente, ovvero, **non assegnare mai `this.props`**.
## I Componenti Sono Come Funzioni
I componenti React sono molto semplici. Puoi immaginarli come semplici funzioni che ricevono in ingresso `props` e `state` (discusso in seguito) e rendono HTML. Fatta questa premessa, i componenti sono molto semplici da descrivere.
> Nota:
>
> **Una limitazione**: i componenti React possono rendere soltanto un singolo nodo radice. Se desideri restituire nodi multipli, essi *devono* essere avvolti in un singolo nodo radice.
## Sintassi JSX
Crediamo fermamente che i componenti sono la maniera corretta di separare i concetti anziché i "modelli" e la "logica di presentazione." Pensiamo che il markup e il codice che lo genera siano intimamente collegati. Inoltre, la logica di presentazione è solitamente molto complessa e usare un linguaggio di modello per esprimerla risulta dispendioso.
Abbiamo scoperto che la migliore soluzione a questo problema è generare HTML e un albero di componenti direttamente dal codice JavaScript in maniera da poter utilizzare tutta la potenza espressiva di un vero linguaggio di programmazione per costruire UI.
Per rendere il compito più facile, abbiamo aggiunto una semplice e **opzionale** sintassi simile all'HTML per creare questi nodi di albero React.
**JSX ti permette di creare oggetti JavaScript usando una sintassi HTML.** Per generare un collegamento in React usando puro JavaScript puoi scrivere:
`React.createElement('a', {href: 'https://facebook.github.io/react/'}, 'Ciao!')`
Con JSX ciò diventa:
`<a href="https://facebook.github.io/react/">Ciao!</a>`
Abbiamo scoperto che questo ha reso la costruzione di applicazioni React più semplice e i designer tendono a preferire la sintassi, ma ciascuno ha un diverso flusso di lavoro, quindi **JSX non è richiesto per utilizzare React.**
JSX è di dimensioni contenute. Per maggiori informazioni, consulta [JSX in profondità](/react/docs/jsx-in-depth-it-IT.html). Oppure osserva la trasformazione in tempo reale sulla [REPL di Babel](https://babeljs.io/repl/).
JSX è simile all'HTML, ma non proprio identico. Consulta la guida [JSX gotchas](/react/docs/jsx-gotchas-it-IT.html) per alcune differenze fondamentali.
[Babel offre una varietà di strumenti per cominciare a usare JSX](http://babeljs.io/docs/setup/), dagli strumenti a riga di comando alle integrazioni in Ruby on Rails. Scegli lo strumento che funziona meglio per te.
## React senza JSX
JSX è completamente opzionale; non è necessario utilizzare JSX con React. Puoi creare elementi React in puro JavaScript usando `React.createElement`, che richiede un nome di tag o di componente, un oggetto di proprietà e un numero variabile di argomenti che rappresentano nodi figli opzionali.
```javascript
var child1 = React.createElement('li', null, 'Primo Contenuto di Testo');
var child2 = React.createElement('li', null, 'Secondo Contenuto di Testo');
var root = React.createElement('ul', { className: 'my-list' }, child1, child2);
ReactDOM.render(root, document.getElementById('example'));
```
Per comodità, puoi creare funzioni factory scorciatoia per costruire elementi da componenti personalizzati.
```javascript
var Factory = React.createFactory(ComponentClass);
...
var root = Factory({ custom: 'prop' });
ReactDOM.render(root, document.getElementById('example'));
```
React possiede già delle factory predefinite per i tag HTML comuni:
```javascript
var root = React.DOM.ul({ className: 'my-list' },
React.DOM.li(null, 'Contenuto di Testo')
);
```

View File

@@ -48,7 +48,7 @@ var HelloWorld = React.createClass({
});
setInterval(function() {
React.render(
ReactDOM.render(
<HelloWorld date={new Date()} />,
document.getElementById('example')
);
@@ -104,7 +104,7 @@ JSXは完全にオプションです。Reactと一緒にJSXを使う必要はあ
var child1 = React.createElement('li', null, 'First Text Content');
var child2 = React.createElement('li', null, 'Second Text Content');
var root = React.createElement('ul', { className: 'my-list' }, child1, child2);
React.render(root, document.getElementById('example'));
ReactDOM.render(root, document.getElementById('example'));
```
便利に書くために、カスタムコンポーネントで要素を作るために簡略した記法でファクトリー関数を作ることができます。
@@ -112,7 +112,7 @@ React.render(root, document.getElementById('example'));
var Factory = React.createFactory(ComponentClass);
...
var root = Factory({ custom: 'prop' });
React.render(root, document.getElementById('example'));
ReactDOM.render(root, document.getElementById('example'));
```
Reactはすでに、共通なHTMLのタグについてはビルトインの関数を持っています。

View File

@@ -47,7 +47,7 @@ var HelloWorld = React.createClass({
});
setInterval(function() {
React.render(
ReactDOM.render(
<HelloWorld date={new Date()} />,
document.getElementById('example')
);
@@ -106,7 +106,7 @@ JSX는 완전히 선택적입니다. 당신은 React와 JSX를 함께 사용하
var child1 = React.createElement('li', null, 'First Text Content');
var child2 = React.createElement('li', null, 'Second Text Content');
var root = React.createElement('ul', { className: 'my-list' }, child1, child2);
React.render(root, document.getElementById('example'));
ReactDOM.render(root, document.getElementById('example'));
```
편의를 위하여, 당신은 팩토리 함수 헬퍼들을 이용해 커스텀 컴포넌트로부터 엘리먼트들을 만들 수 있습니다.
@@ -115,7 +115,7 @@ React.render(root, document.getElementById('example'));
var Factory = React.createFactory(ComponentClass);
...
var root = Factory({ custom: 'prop' });
React.render(root, document.getElementById('example'));
ReactDOM.render(root, document.getElementById('example'));
```
React는 이미 일반적인 HTML 태그에 대한 빌트인 팩토리를 가지고 있습니다.

View File

@@ -8,7 +8,6 @@ next: jsx-in-depth.html
The most basic thing you can do with a UI is display some data. React makes it easy to display data and automatically keeps the interface up-to-date when the data changes.
## Getting Started
Let's look at a really simple example. Create a `hello-react.html` file with the following code:
@@ -20,6 +19,7 @@ Let's look at a really simple example. Create a `hello-react.html` file with the
<meta charset="UTF-8" />
<title>Hello React</title>
<script src="https://fb.me/react-{{site.react_version}}.js"></script>
<script src="https://fb.me/react-dom-{{site.react_version}}.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.23/browser.min.js"></script>
</head>
<body>
@@ -48,14 +48,13 @@ var HelloWorld = React.createClass({
});
setInterval(function() {
React.render(
ReactDOM.render(
<HelloWorld date={new Date()} />,
document.getElementById('example')
);
}, 500);
```
## Reactive Updates
Open `hello-react.html` in a web browser and type your name into the text field. Notice that React is only changing the time string in the UI — any input you put in the text field remains, even though you haven't written any code to manage this behavior. React figures it out for you and does the right thing.
@@ -64,7 +63,6 @@ The way we are able to figure this out is that React does not manipulate the DOM
The inputs to this component are called `props` — short for "properties". They're passed as attributes in JSX syntax. You should think of these as immutable within the component, that is, **never write to `this.props`**.
## Components are Just Like Functions
React components are very simple. You can think of them as simple functions that take in `props` and `state` (discussed later) and render HTML. With this in mind, components are easy to reason about.
@@ -73,7 +71,6 @@ React components are very simple. You can think of them as simple functions that
>
> **One limitation**: React components can only render a single root node. If you want to return multiple nodes they *must* be wrapped in a single root.
## JSX Syntax
We strongly believe that components are the right way to separate concerns rather than "templates" and "display logic." We think that markup and the code that generates it are intimately tied together. Additionally, display logic is often very complex and using template languages to express it becomes cumbersome.
@@ -98,7 +95,6 @@ JSX is similar to HTML, but not exactly the same. See [JSX gotchas](/react/docs/
[Babel exposes a number of ways to get started using JSX](http://babeljs.io/docs/setup/), ranging from command line tools to Ruby on Rails integrations. Choose the tool that works best for you.
## React without JSX
JSX is completely optional; you don't have to use JSX with React. You can create React elements in plain JavaScript using `React.createElement`, which takes a tag name or component, a properties object, and variable number of optional child arguments.
@@ -107,7 +103,7 @@ JSX is completely optional; you don't have to use JSX with React. You can create
var child1 = React.createElement('li', null, 'First Text Content');
var child2 = React.createElement('li', null, 'Second Text Content');
var root = React.createElement('ul', { className: 'my-list' }, child1, child2);
React.render(root, document.getElementById('example'));
ReactDOM.render(root, document.getElementById('example'));
```
For convenience, you can create short-hand factory functions to create elements from custom components.
@@ -116,7 +112,7 @@ For convenience, you can create short-hand factory functions to create elements
var Factory = React.createFactory(ComponentClass);
...
var root = Factory({ custom: 'prop' });
React.render(root, document.getElementById('example'));
ReactDOM.render(root, document.getElementById('example'));
```
React already has built-in factories for common HTML tags:

View File

@@ -21,6 +21,7 @@ next: jsx-in-depth-zh-CN.html
<meta charset="UTF-8" />
<title>Hello React</title>
<script src="https://fb.me/react-{{site.react_version}}.js"></script>
<script src="https://fb.me/react-dom-{{site.react_version}}.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.23/browser.min.js"></script>
</head>
<body>
@@ -49,7 +50,7 @@ var HelloWorld = React.createClass({
});
setInterval(function() {
React.render(
ReactDOM.render(
<HelloWorld date={new Date()} />,
document.getElementById('example')
);
@@ -95,17 +96,17 @@ JSX 非常小上面“hello, world”的例子使用了 JSX 所有的特性
JSX 类似于 HTML但不是完全一样。参考 [JSX 陷阱](/react/docs/jsx-gotchas-zh-CN.html) 学习关键区别。
最简单开始学习 JSX 的方法就是使用浏览器端的 `JSXTransformer`。我们强烈建议你不要在生产环境中使用它。你可以通过我们的命令行工具 [react-tools](https://www.npmjs.com/package/react-tools) 包来预编译你的代码
[Babel 公开了一些使用 JSX 的方式],从命令行工具到 Ruby on Rails 集成。选择一个对你来说最合适的工具
## 没有 JSX 的 React
你完全可以选择是否使用 JSX并不是 React 必须。你可以通过 `React.createElement` 来创建一个树。第一个参数是标签,第二个参数是一个属性对象,每三个是子节点。
JSX完全是可选的你无需在 React 必须使用 JSX。你可以通过 `React.createElement` 来创建一个树。第一个参数是标签,第二个参数是一个属性对象,每三个是子节点。
```javascript
var child = React.createElement('li', null, 'Text Content');
var root = React.createElement('ul', { className: 'my-list' }, child);
React.render(root, document.getElementById('example'));
var child1 = React.createElement('li', null, 'First Text Content');
var child2 = React.createElement('li', null, 'Second Text Content');
var root = React.createElement('ul', { className: 'my-list' }, child1, child2);
ReactDOM.render(root, document.getElementById('example'));
```
方便起见,你可以创建基于自定义组件的速记工厂方法。
@@ -114,13 +115,14 @@ React.render(root, document.getElementById('example'));
var Factory = React.createFactory(ComponentClass);
...
var root = Factory({ custom: 'prop' });
React.render(root, document.getElementById('example'));
ReactDOM.render(root, document.getElementById('example'));
```
React 已经为 HTML 标签提供内置工厂方法。
```javascript
var root = React.DOM.ul({ className: 'my-list' },
React.DOM.li(null, 'Text Content')
);
React.DOM.li(null, 'Text Content')
);
```

View File

@@ -0,0 +1,228 @@
---
id: jsx-in-depth-it-IT
title: JSX in Profondità
permalink: jsx-in-depth-it-IT.html
prev: displaying-data-it-IT.html
next: jsx-spread-it-IT.html
---
[JSX](https://facebook.github.io/jsx/) è un'estensione della sintassi JavaScript che somiglia all'XML. Puoi usare una semplice trasformazione sintattica di JSX con React.
## Perché JSX?
Non devi per forza utilizzare JSX con React. Puoi anche usare semplice JS. Tuttavia, raccomandiamo di utilizzare JSX perché usa una sintassi concisa e familiare per definire strutture ad albero dotate di attributi.
È più familiare a sviluppatori occasionali come i designer.
L'XML ha i benefici di tag di apertura e chiusura bilanciati. Ciò rende la lettura di grandi strutture ad albero più semplice di chiamate a funzione o oggetti letterali.
Non altera la semantica di JavaScript.
## Tag HTML o Componenti React
React può sia rendere tag HTML (stringhe) che componenti React (classi).
Per rendere untag HTML, usa nomi di tag minuscoli in JSX:
```javascript
var myDivElement = <div className="foo" />;
ReactDOM.render(myDivElement, document.getElementById('example'));
```
Per rendere un componente React, definisci una variabile locale che comincia con una lettera maiuscola:
```javascript
var MyComponent = React.createClass({/*...*/});
var myElement = <MyComponent someProperty={true} />;
ReactDOM.render(myElement, document.getElementById('example'));
```
Il JSX di React utilizza la convenzione maiuscolo o minuscolo per distinguere tra classi di componenti locali e tag HTML.
> Nota:
>
> Poiché JSX è JavaScript, gli identificatori come `class` e `for` sono sconsigliati
> come nomi di attributi XML. Invece, i componenti DOM React si aspettano nomi di proprietà
> come `className` e `htmlFor` rispettivamente.
## La Trasformazione
Il JSX di React viene trasformato da una sintassi XML a JavaScript nativo. Gli elementi XML, gli attributi e i figli sono trasformati in argomenti passati a `React.createElement`.
```javascript
var Nav;
// Input (JSX):
var app = <Nav color="blue" />;
// Output (JS):
var app = React.createElement(Nav, {color:"blue"});
```
Osserva che per utilizzare `<Nav />`, la variabile `Nav` deve essere visibile.
JSX permette anche di specificare i figli usando una sintassi XML:
```javascript
var Nav, Profile;
// Input (JSX):
var app = <Nav color="blue"><Profile>click</Profile></Nav>;
// Output (JS):
var app = React.createElement(
Nav,
{color:"blue"},
React.createElement(Profile, null, "click")
);
```
JSX inferirà il [displayName](/react/docs/component-specs-it-IT.html#displayname) della classe dall'assegnazione delle variabile, quando il valore di displayName è indefinito:
```javascript
// Input (JSX):
var Nav = React.createClass({ });
// Output (JS):
var Nav = React.createClass({displayName: "Nav", });
```
Usa la [REPL di Babel](https://babeljs.io/repl/) per provare il JSX e vedere come viene trasformato
in JavaScript nativo, e il
[convertitore da HTML a JSX](/react/html-jsx.html) per convertire il tuo HTML esistente a
JSX.
Se desideri utilizzare JSX, la guida [Primi Passi](/react/docs/getting-started-it-IT.html) ti mostra come impostare la compilazione.
> Nota:
>
> L'espressione JSX viene sempre valutata come un ReactElement. Le implementazioni
> attuali potrebbero differire. Un modo ottimizzato potrebbe porre il
> ReactElement in linea come un oggetto letterale per evitare il codice di validazione in
> `React.createElement`.
## Namespace dei Componenti
Se stai costruendo un componente che ha parecchi figli, come ad esempio un modulo, potresti facilmente trovarti con una quantità di dichiarazioni di variabili:
```javascript
// Imbarazzante blocco di dichiarazioni di variabili
var Form = MyFormComponent;
var FormRow = Form.Row;
var FormLabel = Form.Label;
var FormInput = Form.Input;
var App = (
<Form>
<FormRow>
<FormLabel />
<FormInput />
</FormRow>
</Form>
);
```
Per rendere tutto ciò più semplice e leggibile, *i componenti con un namespace* ti permettono di usare un componente che dispone di altri componenti come proprietà:
```javascript
var Form = MyFormComponent;
var App = (
<Form>
<Form.Row>
<Form.Label />
<Form.Input />
</Form.Row>
</Form>
);
```
Per fare ciò, devi semplicemente creare i tuoi *"sub-componenti"* come proprietà del componente principale:
```javascript
var MyFormComponent = React.createClass({ ... });
MyFormComponent.Row = React.createClass({ ... });
MyFormComponent.Label = React.createClass({ ... });
MyFormComponent.Input = React.createClass({ ... });
```
JSX gestirà il tutto correttamente al momento di compilare il tuo codice.
```javascript
var App = (
React.createElement(Form, null,
React.createElement(Form.Row, null,
React.createElement(Form.Label, null),
React.createElement(Form.Input, null)
)
)
);
```
> Nota:
>
> Questa funzionalità è disponibile nella [v0.11](/react/blog/2014/07/17/react-v0.11.html#jsx) e successive.
## Espressioni JavaScript
### Expressioni come Attributi
Per usare un'espressione JavaScript come valore di un attributo, racchiudi l'espressione in un paio
di parentesi graffe (`{}`) anziché doppi apici (`""`).
```javascript
// Input (JSX):
var person = <Person name={window.isLoggedIn ? window.name : ''} />;
// Output (JS):
var person = React.createElement(
Person,
{name: window.isLoggedIn ? window.name : ''}
);
```
### Attributi Booleani
Omettere il valore di un attributo fa in modo che JSX lo tratti come `true`. Per passare `false` occorre utilizzare un'espressione come attributo. Ciò capita spesso quando si usano elementi di moduli HTML, con attributi come `disabled`, `required`, `checked` e `readOnly`.
```javascript
// Queste due forme sono equivalenti in JSX per disabilitare un bottone
<input type="button" disabled />;
<input type="button" disabled={true} />;
// E queste due forme sono equivalenti in JSX per non disabilitare un bottone
<input type="button" />;
<input type="button" disabled={false} />;
```
### Expressioni per Figli
Similmente, espressioni JavaScript possono essere utilizzate per rappresentare figli:
```javascript
// Input (JSX):
var content = <Container>{window.isLoggedIn ? <Nav /> : <Login />}</Container>;
// Output (JS):
var content = React.createElement(
Container,
null,
window.isLoggedIn ? React.createElement(Nav) : React.createElement(Login)
);
```
### Commenti
È facile aggiungere commenti al tuo codice JSX; sono semplici espressioni JS. Devi soltanto prestare attenzione a porre `{}` attorno ai commenti quando ti trovi dentro la sezione figli di un tag.
```javascript
var content = (
<Nav>
{/* commento figlio, racchiuso in {} */}
<Person
/* commento
su più
righe */
name={window.isLoggedIn ? window.name : ''} // fine del commento su una riga
/>
</Nav>
);
```
> NOTA:
>
> JSX è simile all'HTML, ma non esattamente identico. Consulta la guida [JSX gotchas](/react/docs/jsx-gotchas-it-IT.html) per le differenze fondamentali.

View File

@@ -26,7 +26,7 @@ ReactはHTMLタグ文字列とReactコンポーネントクラス
```javascript
var myDivElement = <div className="foo" />;
React.render(myDivElement, document.getElementById('example'));
ReactDOM.render(myDivElement, document.getElementById('example'));
```
以下のように大文字から始まるローカル変数を作成するだけで、Reactのコンポーネントをレンダリングできます。
@@ -34,7 +34,7 @@ React.render(myDivElement, document.getElementById('example'));
```javascript
var MyComponent = React.createClass({/*...*/});
var myElement = <MyComponent someProperty={true} />;
React.render(myElement, document.getElementById('example'));
ReactDOM.render(myElement, document.getElementById('example'));
```
ReactのJSXは大文字と小文字を使うことで、ローカルのコンポーネントクラスとHTMLタグを識別する習慣があります。
@@ -216,4 +216,4 @@ var content = (
```
> 注意:
> JSXはHTMLに似ていますが、全く同じではありません。いくつかのキーの違いについては[JSXの理解](/react/docs/jsx-gotchas.html) をご覧ください。
> JSXはHTMLに似ていますが、全く同じではありません。いくつかのキーの違いについては[JSXの理解](/react/docs/jsx-gotchas.html) をご覧ください。

View File

@@ -26,7 +26,7 @@ HTML 태그를 렌더하려면, 그냥 JSX에 소문자 태그를 사용하세
```javascript
var myDivElement = <div className="foo" />;
React.render(myDivElement, document.getElementById('example'));
ReactDOM.render(myDivElement, document.getElementById('example'));
```
React 컴포넌트를 렌더하려면, 대문자로 시작하는 로컬 변수를 만드세요.
@@ -34,7 +34,7 @@ React 컴포넌트를 렌더하려면, 대문자로 시작하는 로컬 변수
```javascript
var MyComponent = React.createClass({/*...*/});
var myElement = <MyComponent someProperty={true} />;
React.render(myElement, document.getElementById('example'));
ReactDOM.render(myElement, document.getElementById('example'));
```
React JSX는 대소문자를 로컬 컴포넌트 클래스와 HTML 태그를 구별하는 컨벤션으로 사용합니다.

View File

@@ -26,7 +26,7 @@ To render a HTML tag, just use lower-case tag names in JSX:
```javascript
var myDivElement = <div className="foo" />;
React.render(myDivElement, document.getElementById('example'));
ReactDOM.render(myDivElement, document.getElementById('example'));
```
To render a React Component, just create a local variable that starts with an upper-case letter:
@@ -34,7 +34,7 @@ To render a React Component, just create a local variable that starts with an up
```javascript
var MyComponent = React.createClass({/*...*/});
var myElement = <MyComponent someProperty={true} />;
React.render(myElement, document.getElementById('example'));
ReactDOM.render(myElement, document.getElementById('example'));
```
React's JSX uses the upper vs. lower case convention to distinguish between local component classes and HTML tags.

View File

@@ -28,7 +28,7 @@ React 可以渲染 HTML 标签 (strings) 或 React 组件 (classes)。
```javascript
var myDivElement = <div className="foo" />;
React.render(myDivElement, document.getElementById('example'));
ReactDOM.render(myDivElement, document.getElementById('example'));
```
要渲染 React 组件,只需创建一个大写字母开头的本地变量。
@@ -36,7 +36,7 @@ React.render(myDivElement, document.getElementById('example'));
```javascript
var MyComponent = React.createClass({/*...*/});
var myElement = <MyComponent someProperty={true} />;
React.render(myElement, document.getElementById('example'));
ReactDOM.render(myElement, document.getElementById('example'));
```
React 的 JSX 使用大、小写的约定来区分本地组件的类和 HTML 标签。
@@ -99,7 +99,7 @@ var Nav = React.createClass({displayName: "Nav", });
如果你正在构建一个有很多子组件的组件,比如表单,你也许会最终得到许多的变量声明。
```javascript
// 尴尬的变量声明块
// 尴尬的变量声明块
var Form = MyFormComponent;
var FormRow = Form.Row;
var FormLabel = Form.Label;
@@ -221,5 +221,5 @@ var content = (
```
> 注意:
>
>
> JSX 类似于 HTML但不完全一样。参考 [JSX 陷阱](/react/docs/jsx-gotchas-zh-CN.html) 了解主要不同。

View File

@@ -0,0 +1,52 @@
---
id: jsx-spread-it-IT
title: Attributi Spread JSX
permalink: jsx-spread-it-IT.html
prev: jsx-in-depth-it-IT.html
next: jsx-gotchas-it-IT.html
---
Se sai in anticipo che tutte le proprietà che desideri assegnare ad un componente, usare JSX è facile:
```javascript
var component = <Component foo={x} bar={y} />;
```
## Le Props Mutevoli sono il Male
Se non sai quali proprietà desideri impostare, potresti essere tentato di aggiungerle all'oggetto in seguito:
```javascript
var component = <Component />;
component.props.foo = x; // male
component.props.bar = y; // altrettanto male
```
Questo è un anti-pattern perché significa che non possiamo aiutarti a verificare i propTypes per tempo. Ciò significa che i tuoi errori di propTypes finiscono per avere uno stack trace indecifrabile.
Le props dovrebbero essere considerate immutabili. Mutare l'oggetto props altrove potrebbe causare conseguenze inattese, quindi a questo punto dovrebbe essere idealmente considerato un oggetto congelato.
## Attributi Spread
Adesso puoi utilizzare una nuova caratteristica di JSX chiamata attributi spread:
```javascript
var props = {};
props.foo = x;
props.bar = y;
var component = <Component {...props} />;
```
Le proprietà dell'oggetto che passi al componente sono copiate nelle sue props.
Puoi usarlo più volte o combinarlo con altri attributi. L'ordine in cui sono specificati è rilevante. Attributi successivi ridefiniscono quelli precedentemente impostati.
```javascript
var props = { foo: 'default' };
var component = <Component {...props} foo={'override'} />;
console.log(component.props.foo); // 'override'
```
## Cos'è la strana notazione `...`?
L'operatore `...` (o operatore spread) è già supportato per gli [array in ES6](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator). Esiste anche una proposta per ES7 per le proprietà [Spread e Rest di Object](https://github.com/sebmarkbage/ecmascript-rest-spread). Stiamo prendendo spunto da questi standard supportati o in corso di sviluppo per fornire una sintassi più pulita a JSX.

View File

@@ -12,7 +12,7 @@ If you know all the properties that you want to place on a component ahead of ti
var component = <Component foo={x} bar={y} />;
```
## Mutating Props is Bad, mkay
## Mutating Props is Bad
If you don't know which properties you want to set, you might be tempted to add them onto the object later:

View File

@@ -25,7 +25,7 @@ next: jsx-gotchas-zh-CN.html
这样是反模式,因为 React 不能帮你检查属性类型propTypes。这样即使你的 属性类型有错误也不能得到清晰的错误提示。
Props 应该被当作禁止修改的。修改 props 对象可能会导致预料之外的结果,所以最好不要去修改 props 对象。
Props 应该被认为是不可变的。在别处修改 props 对象可能会导致预料之外的结果,所以原则上这将是一个冻结的对象。
## 展开属性Spread Attributes

View File

@@ -0,0 +1,68 @@
---
id: jsx-gotchas-it-IT
title: JSX Gotchas
permalink: jsx-gotchas-it-IT.html
prev: jsx-spread-it-IT.html
next: interactivity-and-dynamic-uis-it-IT.html
---
JSX somiglia all'HTML ma ci sono delle differenze importanti da tenere in considerazione.
> Nota:
>
> Per le differenze del DOM, come l'attributo `style` in linea, consulta [here](/react/docs/dom-differences-it-IT.html).
## Entità HTML
Puoi inserire entità HTML nel testo letterale in JSX:
```javascript
<div>Primo &middot; Secondo</div>
```
Se desideri visualizzare un'entità HTML all'interno di un contenuto dinamico, avrai problemi con il doppio escape, poiché React effettua in maniera predefinita l'escape di tutte le stringhe visualizzate per prevenire un'ampia gamma di attacchi XSS.
```javascript
// Male: Mostra "Primo &middot; Secondo"
<div>{'Primo &middot; Secondo'}</div>
```
Esistono molte maniere di aggirare questo problema. La più facile è scrivere i caratteri Unicode direttamente in JavaScript. Dovrai assicurarti che il file sia salvato come UTF-8 e che le appropriate direttive UTF-8 siano impostate in modo che il browser li visualizzi correttamente.
```javascript
<div>{'Primo · Secondo'}</div>
```
Un'alternativa più sicura consiste nel trovare il [codice Unicode corrispondente all'entità](http://www.fileformat.info/info/unicode/char/b7/index.htm) e usarlo all'interno di una stringa JavaScript.
```javascript
<div>{'Primo \u00b7 Secondo'}</div>
<div>{'Primo ' + String.fromCharCode(183) + ' Secondo'}</div>
```
Puoi usare array misti con stringhe ed elementi JSX.
```javascript
<div>{['Primo ', <span>&middot;</span>, ' Secondo']}</div>
```
Come ultima risorsa, puoi sempre [inserire HTML nativo](/react/tips/dangerously-set-inner-html.html).
```javascript
<div dangerouslySetInnerHTML={{'{{'}}__html: 'Primo &middot; Secondo'}} />
```
## Attributi HTML Personalizzati
Se passi proprietà che non esistono nella specifica HTML ad elementi HTML nativi, React li ignorerà. Se vuoi usare un attributo personalizzato, devi prefiggerlo con `data-`.
```javascript
<div data-custom-attribute="foo" />
```
Gli attributi per [l'Accessibilità del Web](http://www.w3.org/WAI/intro/aria) che iniziano per `aria-` saranno gestiti correttamente.
```javascript
<div aria-hidden={true} />
```

View File

@@ -27,7 +27,7 @@ If you want to display an HTML entity within dynamic content, you will run into
<div>{'First &middot; Second'}</div>
```
There are various ways to work-around this issue. The easiest one is to write unicode characters directly in JavaScript. You need to make sure that the file is saved as UTF-8 and that the proper UTF-8 directives are set so the browser will display it correctly.
There are various ways to work-around this issue. The easiest one is to write Unicode characters directly in JavaScript. You need to make sure that the file is saved as UTF-8 and that the proper UTF-8 directives are set so the browser will display it correctly.
```javascript
<div>{'First · Second'}</div>

View File

@@ -46,7 +46,7 @@ HTML 实体可以插入到 JSX 的文本中。
<div>{['First ', <span>&middot;</span>, ' Second']}</div>
```
万不得已,可以直接使用原始 HTML。
万不得已,可以直接[插入原始HTML](/react/tips/dangerously-set-inner-html.html)
```javascript
<div dangerouslySetInnerHTML={{'{{'}}__html: 'First &middot; Second'}} />
@@ -60,7 +60,7 @@ HTML 实体可以插入到 JSX 的文本中。
<div data-custom-attribute="foo" />
```
`aria-` 开头的 [网络无障碍] 属性可以正常使用。
`aria-` 开头的 [网络无障碍](http://www.w3.org/WAI/intro/aria) 属性可以正常使用。
```javascript
<div aria-hidden={true} />

View File

@@ -0,0 +1,84 @@
---
id: interactivity-and-dynamic-uis-it-IT
title: Interattività e UI Dinamiche
permalink: interactivity-and-dynamic-uis-it-IT.html
prev: jsx-gotchas-it-IT.html
next: multiple-components-it-IT.html
---
Hai già [imparato a mostrare dati](/react/docs/displaying-data-it-IT.html) con React. Adesso vediamo come rendere le nostre UI interattive.
## Un Esempio Semplice
```javascript
var LikeButton = React.createClass({
getInitialState: function() {
return {liked: false};
},
handleClick: function(event) {
this.setState({liked: !this.state.liked});
},
render: function() {
var text = this.state.liked ? 'mi piace' : 'non mi piace';
return (
<p onClick={this.handleClick}>
You {text} this. Click to toggle.
</p>
);
}
});
ReactDOM.render(
<LikeButton />,
document.getElementById('example')
);
```
## Gestione degli Eventi ed Eventi Sintetici
Con React devi semplicemente passare il tuo gestore di eventi come una proprietà camelCased in modo simile a come faresti nel normale HTML. React si assicura che tutti gli eventi si comportano in maniera identica in IE8 e successivi implementando un sistema di eventi sintetici. Ovvero, React sa come propagare e catturare eventi secondo la specifica, e garantisce che gli eventi passati ai tuoi gestori di eventi siano consistenti con la [specifica W3C](http://www.w3.org/TR/DOM-Level-3-Events/), qualunque browser tu stia utilizzando.
## Dietro le Quinte: Binding Automatico e Delega degli Eventi
Dietro le quinte, React esegue alcune operazioni per mantenere il tuo codice ad alte prestazioni e facile da comprendere.
**Binding automatico:** Quando crei le callback in JavaScript, solitamente devi fare il binding esplicito del metodo alla sua istanza, in modo che il valore di `this` sia corretto. Con React, ogni metodo è automaticamente legato alla propria istanza del componente (eccetto quando si usa la sintassi delle classi ES6). React immagazzina il metodo legato in maniera tale da essere estremamente efficiente in termini di CPU e memoria. Ti permette anche di scrivere meno codice!
**Delega degli eventi:** React non associa realmente i gestori di eventi ai nodi stessi. Quando React si avvia, comincia ad ascoltare tutti gli eventi a livello globale usando un singolo event listener. Quando un componente viene montato o smontato, i gestori di eventi sono semplicemente aggiunti o rimossi da un mapping interno. Quando si verifica un evento, React sa come inoltrarlo utilizzando questo mapping. Quando non ci sono più gestori di eventi rimasti nel mapping, i gestori di eventi di React sono semplici operazioni fittizie. Per saperne di più sul perché questo approccio è veloce, leggi [l'eccellente articolo sul blog di David Walsh](http://davidwalsh.name/event-delegate).
## I Componenti Sono Macchine a Stati Finiti
React considera le UI come semplici macchine a stati finiti. Pensando alla UI come in uno di tanti stati diversi e visualizzando questi stati, è facile mantenere la UI consistente.
In React, aggiorni semplicemente lo stato di un componente, e quindi visualizzi una nuova UI basata su questo nuovo stato. React si occupa di aggiornare il DOM al tuo posto nella maniera più efficiente.
## Come Funziona lo Stato
Una maniera comune di informare React di un cambiamento nei dati è chiamare `setState(data, callback)`. Questo metodo effettua il merge di `data` in `this.state` e ridisegna il componente. Quando il componente ha terminato la fase di ri-rendering, la `callback` opzionale viene invocata. Nella maggior parte dei casi non avrai bisogno di fornire una `callback` dal momento che React si occuperà di mantenere la UI aggiornata per te.
## Quali Componenti Devono Avere uno Stato?
La maggior parte dei tuoi componenti dovrebbero semplicemente ricevere dei dati da `props` e visualizzarli. Tuttavia, a volte hai bisogno di reagire all'input dell'utente, una richiesta al server o il trascorrere del tempo. In questi casi utilizzi lo stato.
**Prova a mantenere il maggior numero possibile dei tuoi componenti privi di stato.** Facendo ciò, isolerai lo stato nel suo luogo logicamente corretto e minimizzerai la ridondanza, rendendo più semplice ragionare sulla tua applicazione.
Un pattern comune è quello di creare diversi componenti privi di stato che mostrano semplicemente dati, e di avere un componente dotato di stato al di sopra di essi nella gerarchia, che passa il proprio stato ai suoi figli tramite le `props`. Il componente dotato di stato incapsula tutta la logica di interazione, mentre i componenti privi di stato si occupano della visualizzazione dei dati in maniera dichiarativa.
## Cosa *Dovrebbe* Contenere lo Stato?
**Lo stato dovrebbe contenere dati che i gestori di eventi del componente possono modificare per scatenare un aggiornamento della UI.** In applicazioni reali, questi dati tendono ad essere molto limitati e serializzabili come JSON. Quando costruisci un componente dotato di stato, pensa alla minima rappresentazione possibile del suo stato, e conserva solo quelle proprietà in `this.state`. All'interno di `render()` calcola quindi ogni altra informazione necessaria basandoti sullo stato. Ti accorgerai che pensare e scrivere applicazioni in questo modo porta alla scrittura dell'applicazione più corretta, dal momento che aggiungere valori ridondanti o calcolati allo stato significherebbe doverli mantenere sincronizzati esplicitamente, anziché affidarti a React perché li calcoli al tuo posto.
## Cosa *Non Dovrebbe* Contenere lo Stato?
`this.state` dovrebbe contenere soltanto la quantità minima di dati indispensabile a rappresentare lo stato della tua UI. In quanto tale, non dovrebbe contenere:
* **Dati calcolati:** Non preoccuparti di precalcolare valori basati sullo stato — è più semplice assicurarti che la tua UI sia consistente se effettui tutti i calcoli all'interno di `render()`. Per esempio, se lo stato contiene un array di elementi di una lista, e vuoi mostrare il numero di elementi come stringa, mostra semplicemente `this.state.listItems.length + ' elementi nella lista'` nel tuo metodo `render()` anziché conservarlo nello stato.
* **Componenti React:** Costruiscili in `render()` basandoti sulle proprietà e sullo stato del componente.
* **Dati duplicati dalle proprietà:** Prova ad utilizzare le proprietà come fonte di verità ove possibile. Un uso valido dello stato per i valori delle proprietà è conservarne il valore precedente quando le proprietà cambiano nel tempo.

View File

@@ -29,7 +29,7 @@ var LikeButton = React.createClass({
}
});
React.render(
ReactDOM.render(
<LikeButton />,
document.getElementById('example')
);
@@ -78,7 +78,7 @@ Reactがデータの変更を通知する共通な方法は `setState(data, call
`this.state` UIのstateを表す必要がある最小限の量のデータだけを保持するべきです。このような点で以下のようなものは保持するべきではありません。
* **計算されたデータ:**
* **計算されたデータ:**
stateに基づく事前に計算された値について心配は要りません。 `render()` を用いて、全ての計算を行って、UIの一貫性を保証するよりも簡単です。例えば、stateにリスト化されたアイテムの配列を持っていて、文字列としてその数をレンダリングしたいとして、それらをstateに保持するよりも `render()` メソッドに `this.state.listItems.length + ' list items'` を単純にレンダリングすれば良いのです。
* **Reactのコンポーネント:** 隠れたpropsとstateに基づいて `render()` でそれらをビルドしてください。
* **propsからコピーしたデータ:** 可能であれば、propsを真のソースとして使ってみてください。propsは時とともに変化し得るので、正しくstateにpropsを保持する使い方は、以前の値を知っていることになり得ます。
* **propsからコピーしたデータ:** 可能であれば、propsを真のソースとして使ってみてください。propsは時とともに変化し得るので、正しくstateにpropsを保持する使い方は、以前の値を知っていることになり得ます。

View File

@@ -29,7 +29,7 @@ var LikeButton = React.createClass({
}
});
React.render(
ReactDOM.render(
<LikeButton />,
document.getElementById('example')
);

View File

@@ -8,7 +8,6 @@ next: multiple-components.html
You've already [learned how to display data](/react/docs/displaying-data.html) with React. Now let's look at how to make our UIs interactive.
## A Simple Example
```javascript
@@ -29,20 +28,16 @@ var LikeButton = React.createClass({
}
});
React.render(
ReactDOM.render(
<LikeButton />,
document.getElementById('example')
);
```
## Event Handling and Synthetic Events
With React you simply pass your event handler as a camelCased prop similar to how you'd do it in normal HTML. React ensures that all events behave identically in IE8 and above by implementing a synthetic event system. That is, React knows how to bubble and capture events according to the spec, and the events passed to your event handler are guaranteed to be consistent with [the W3C spec](http://www.w3.org/TR/DOM-Level-3-Events/), regardless of which browser you're using.
If you'd like to use React on a touch device such as a phone or tablet, simply call `React.initializeTouchEvents(true);` to enable touch event handling.
## Under the Hood: Autobinding and Event Delegation
Under the hood, React does a few things to keep your code performant and easy to understand.
@@ -51,19 +46,16 @@ Under the hood, React does a few things to keep your code performant and easy to
**Event delegation:** React doesn't actually attach event handlers to the nodes themselves. When React starts up, it starts listening for all events at the top level using a single event listener. When a component is mounted or unmounted, the event handlers are simply added or removed from an internal mapping. When an event occurs, React knows how to dispatch it using this mapping. When there are no event handlers left in the mapping, React's event handlers are simple no-ops. To learn more about why this is fast, see [David Walsh's excellent blog post](http://davidwalsh.name/event-delegate).
## Components are Just State Machines
React thinks of UIs as simple state machines. By thinking of a UI as being in various states and rendering those states, it's easy to keep your UI consistent.
In React, you simply update a component's state, and then render a new UI based on this new state. React takes care of updating the DOM for you in the most efficient way.
## How State Works
A common way to inform React of a data change is by calling `setState(data, callback)`. This method merges `data` into `this.state` and re-renders the component. When the component finishes re-rendering, the optional `callback` is called. Most of the time you'll never need to provide a `callback` since React will take care of keeping your UI up-to-date for you.
## What Components Should Have State?
Most of your components should simply take some data from `props` and render it. However, sometimes you need to respond to user input, a server request or the passage of time. For this you use state.
@@ -72,15 +64,14 @@ Most of your components should simply take some data from `props` and render it.
A common pattern is to create several stateless components that just render data, and have a stateful component above them in the hierarchy that passes its state to its children via `props`. The stateful component encapsulates all of the interaction logic, while the stateless components take care of rendering data in a declarative way.
## What *Should* Go in State?
**State should contain data that a component's event handlers may change to trigger a UI update.** In real apps this data tends to be very small and JSON-serializable. When building a stateful component, think about the minimal possible representation of its state, and only store those properties in `this.state`. Inside of `render()` simply compute any other information you need based on this state. You'll find that thinking about and writing applications in this way tends to lead to the most correct application, since adding redundant or computed values to state means that you need to explicitly keep them in sync rather than rely on React computing them for you.
## What *Shouldnt* Go in State?
## What *Shouldn't* Go in State?
`this.state` should only contain the minimal amount of data needed to represent your UI's state. As such, it should not contain:
* **Computed data:** Don't worry about precomputing values based on state — it's easier to ensure that your UI is consistent if you do all computation within `render()`. For example, if you have an array of list items in state and you want to render the count as a string, simply render `this.state.listItems.length + ' list items'` in your `render()` method rather than storing it on state.
* **React components:** Build them in `render()` based on underlying props and state.
* **Duplicated data from props:** Try to use props as the source of truth where possible. One valid use to store props in state is to be able to know its previous values, because props can change over time.
* **Duplicated data from props:** Try to use props as the source of truth where possible. One valid use to store props in state is to be able to know its previous values, because props may change as the result of a parent component re-rendering.

View File

@@ -29,7 +29,7 @@ var LikeButton = React.createClass({
}
});
React.render(
ReactDOM.render(
<LikeButton />,
document.getElementById('example')
);
@@ -40,13 +40,11 @@ React.render(
React 里只需把事件处理器event handler以骆峰命名camelCased形式当作组件的 props 传入即可,就像使用普通 HTML 那样。React 内部创建一套合成事件系统来使所有事件在 IE8 和以上浏览器表现一致。也就是说React 知道如何冒泡和捕获事件,而且你的事件处理器接收到的 events 参数与 [W3C 规范](http://www.w3.org/TR/DOM-Level-3-Events/) 一致,无论你使用哪种浏览器。
如果需要在手机或平板等触摸设备上使用 React需要调用 `React.initializeTouchEvents(true);` 启用触摸事件处理。
## 幕后原理自动绑定Autobinding和事件代理Event Delegation
在幕后React 做了一些操作来让代码高效运行且易于理解。
**Autobinding:** 在 JavaScript 里创建回调的时候,为了保证 `this` 的正确性,一般都需要显式地绑定方法到它的实例上。有了 React所有方法被自动绑定到了它的组件实例上。React 还缓存这些绑定方法,所以 CPU 和内存都是非常高效。而且还能减少打字!
**Autobinding:** 在 JavaScript 里创建回调的时候,为了保证 `this` 的正确性,一般都需要显式地绑定方法到它的实例上。 React所有方法被自动绑定到了它的组件实例上除非使用ES6的class符号。React 还缓存这些绑定方法,所以 CPU 和内存都是非常高效。而且还能减少打字!
**事件代理 ** React 实际并没有把事件处理器绑定到节点本身。当 React 启动的时候它在最外层使用唯一一个事件监听器处理所有事件。当组件被加载和卸载时只是在内部映射里添加或删除事件处理器。当事件触发React 根据映射来决定如何分发。当映射里处理器时,会当作空操作处理。参考 [David Walsh 很棒的文章](http://davidwalsh.name/event-delegate) 了解这样做高效的原因。

View File

@@ -0,0 +1,190 @@
---
id: multiple-components-it-IT
title: Componenti Multipli
permalink: multiple-components-it-IT.html
prev: interactivity-and-dynamic-uis-it-IT.html
next: reusable-components-it-IT.html
---
Finora abbiamo visto come scrivere un singolo componente per mostrare dati e gestire l'input dell'itente. Adesso esaminiamo una delle migliori caratteristiche di React: la componibilità.
## Motivazione: Separazione dei Concetti
Costruendo componenti modulari che riutilizzano altri componenti con interfacce ben definite, ottieni gli stessi benefici che otterresti usando funzioni o classi. Nello specifico, puoi *separare i diversi concetti* della tua applicazione nel modo che preferisci semplicemente costruendo nuovi componenti. Costruendo una libreria di componenti personalizzati per la tua applicazione, stai esprimendo la tua UI in una maniera che si adatta meglio al tuo dominio.
## Esepmio di Composizione
Creiamo un semplice componente Avatar che mostra una foto del profilo e un nome utente usando la Graph API di Facebook.
```javascript
var Avatar = React.createClass({
render: function() {
return (
<div>
<ProfilePic username={this.props.username} />
<ProfileLink username={this.props.username} />
</div>
);
}
});
var ProfilePic = React.createClass({
render: function() {
return (
<img src={'https://graph.facebook.com/' + this.props.username + '/picture'} />
);
}
});
var ProfileLink = React.createClass({
render: function() {
return (
<a href={'https://www.facebook.com/' + this.props.username}>
{this.props.username}
</a>
);
}
});
ReactDOM.render(
<Avatar username="pwh" />,
document.getElementById('example')
);
```
## Possesso
Nell'esempio precedente, le istanze di `Avatar` *posseggono* instanze di `ProfilePic` e `ProfileLink`. In React, **un proprietario è il componente che imposta le `props` di altri componenti**. Più formalmente, se un componente `X` è creato nel metodo `render()` del componente `Y`, si dice che `X` è *di proprietà di* `Y`. Come discusso in precedenza, un componente non può mutare le sue `props` — sono sempre consistenti con il valore che il suo proprietario ha impostato. Questa invariante fondamentale porta a UI la cui consistenza può essere garantita.
È importante distinguere tra la relazione di proprietario-proprietà e la relazione genitore-figlio. La relazione proprietario-proprietà è specifica di React, mentre la relazione genitore-figlio è semplicemente quella che conosci e ami del DOM. Nell'esempio precedente, `Avatar` possiede il `div`, le istanze di `ProfilePic` e `ProfileLink`, e `div` è il **genitore** (ma non il proprietario) delle istanze di `ProfilePic` e `ProfileLink`.
## Figli
Quando crei un'istanza di un componente React, puoi includere componenti React aggiuntivi o espressioni JavaScript tra i tag di apertura e chiusura come segue:
```javascript
<Parent><Child /></Parent>
```
`Parent` può accedere ai propri figli leggendo la speciale proprietà `this.props.children`. **`this.props.children` è una struttura dati opaca:** usa le [utilità React.Children](/react/docs/top-level-api.html#react.children) per manipolare i figli.
### Riconciliazione dei Figli
**La riconciliazione è il processo per il quale React aggiorna il DOM ad ogni passata di rendering.** In generale, i figli sono riconciliati secondo l'ordine in cui sono mostrati. Per esempio, supponiamo che due passate di rendering generino rispettivamente il markup seguente:
```html
// Prima passata di rendering
<Card>
<p>Paragrafo 1</p>
<p>Paragrafo 2</p>
</Card>
// Seconda passata di rendering
<Card>
<p>Paragrafo 2</p>
</Card>
```
Intuitivamente, `<p>Paragrafo 1</p>` è stato rimosso. Invece, React riconcilierà il DOM cambiando il testo contenuto nel primo figlio e distruggerà l'ultimo figlio. React reconcilia secondo l'*ordine* dei figli.
### Figli Dotati di Stato
Per molti componenti, questo non è un grande problema. Tuttavia, per i componenti dotati di stato che mantengono dati in `this.state` attraverso le diverse passate di rendering, questo può essere problematico.
In molti casi, questo problema può essere aggirato nascondendo gli elementi anziché distruggendoli:
```html
// Prima passata di rendering
<Card>
<p>Paragrafo 1</p>
<p>Paragrafo 2</p>
</Card>
// Seconda passata di rendering
<Card>
<p style={{'{{'}}display: 'none'}}>Paragrafo 1</p>
<p>Paragrafo 2</p>
</Card>
```
### Figli Dinamici
La situazione si complica quando i figli sono rimescolati (come nei risultati della ricerca) o se nuovi componenti sono aggiunti all'inizio della lista (come negli stream). In questi casi quando l'identità e lo stato di ogni figlio deve essere preservato attraverso passate di rendering, puoi unicamente identificare ciascun figlio assegnandogli una proprietà `key`:
```javascript
render: function() {
var results = this.props.results;
return (
<ol>
{results.map(function(result) {
return <li key={result.id}>{result.text}</li>;
})}
</ol>
);
}
```
Quando React riconcilia i figli dotati di `key`, si assicurerà che ciascun figlio con la proprietà `key` sia riordinato (anziché clobbered) o distrutto (anziché riutilizzato).
La proprietà `key` dovrebbe *sempre* essere fornita direttamente all'elemento del componente nell'array, non al contenitore HTML di ciascun componente dell'array:
```javascript
// SBAGLIATO!
var ListItemWrapper = React.createClass({
render: function() {
return <li key={this.props.data.id}>{this.props.data.text}</li>;
}
});
var MyComponent = React.createClass({
render: function() {
return (
<ul>
{this.props.results.map(function(result) {
return <ListItemWrapper data={result}/>;
})}
</ul>
);
}
});
```
```javascript
// Corretto :)
var ListItemWrapper = React.createClass({
render: function() {
return <li>{this.props.data.text}</li>;
}
});
var MyComponent = React.createClass({
render: function() {
return (
<ul>
{this.props.results.map(function(result) {
return <ListItemWrapper key={result.id} data={result}/>;
})}
</ul>
);
}
});
```
Puoi anche assegnare chiavi ai figli passandogli un oggetto ReactFragment. Leggi [Frammenti con Chiave](create-fragment.html) per maggiori dettagli.
## Flusso dei Dati
In React, i dati fluiscono dal proprietario al componente posseduto attraverso le `props` come discusso in precedenza. Questo è a tutti gli effetti un binding di dati unidirezionale: i proprietari legano le proprietà dei componenti di loro proprietà a dei valori che il proprietario stesso ha calcolato in base ai propri `props` o `state`. Dal momento che questo processo avviene ricorsivamente, i cambiamenti dei dati vengono riflessi automaticamente ovunque vengano usati.
## Una Nota sulle Prestazioni
Ti starai chiedendo che cambiare i dati sia un'operazione costosa in presenza di un gran numero di nodi sotto un proprietario. La buona notizia è che JavaScript è veloce e i metodi `render()` tendono ad essere molto semplici, quindi in molte applicazioni questo è un processo estremamente veloce. Inoltre, il collo di bottiglia è quasi sempre la mutazione del DOM e non l'esecuzione di JS. React ottimizzerà tutto per te usando il raggruppamento e osservando i cambiamenti.
Tuttavia, a volte vorrai avere un controllo più raffinato sulle tue prestazioni. In tal caso, ridefinisci il metodo `shouldComponentUpdate()` per restituire false quando vuoi che React salti il trattamento di un sottoalbero. Consulta [la documentazione di riferimento di React](/react/docs/component-specs.html) per maggiori informazioni.
> Nota:
>
> Se `shouldComponentUpdate()` restituisce false quando i dati sono effettivamente cambiati, React non è in grado di mantenere la tua UI in sincronia. Assicurati di usare questa tecnica con cognizione di causa, e soltanto in presenza di problemi percettibili di prestazioni. Non sottovalutare l'estrema velocità di esecuzione di JavaScript se paragonata a quella del DOM.

View File

@@ -46,7 +46,7 @@ var ProfileLink = React.createClass({
}
});
React.render(
ReactDOM.render(
<Avatar username="pwh" />,
document.getElementById('example')
);

View File

@@ -48,7 +48,7 @@ var ProfileLink = React.createClass({
}
});
React.render(
ReactDOM.render(
<Avatar username="pwh" />,
document.getElementById('example')
);

View File

@@ -8,12 +8,10 @@ next: reusable-components.html
So far, we've looked at how to write a single component to display data and handle user input. Next let's examine one of React's finest features: composability.
## Motivation: Separation of Concerns
By building modular components that reuse other components with well-defined interfaces, you get much of the same benefits that you get by using functions or classes. Specifically you can *separate the different concerns* of your app however you please simply by building new components. By building a custom component library for your application, you are expressing your UI in a way that best fits your domain.
## Composition Example
Let's create a simple Avatar component which shows a profile picture and username using the Facebook Graph API.
@@ -48,20 +46,18 @@ var ProfileLink = React.createClass({
}
});
React.render(
ReactDOM.render(
<Avatar username="pwh" />,
document.getElementById('example')
);
```
## Ownership
In the above example, instances of `Avatar` *own* instances of `ProfilePic` and `ProfileLink`. In React, **an owner is the component that sets the `props` of other components**. More formally, if a component `X` is created in component `Y`'s `render()` method, it is said that `X` is *owned by* `Y`. As discussed earlier, a component cannot mutate its `props` — they are always consistent with what its owner sets them to. This fundamental invariant leads to UIs that are guaranteed to be consistent.
It's important to draw a distinction between the owner-ownee relationship and the parent-child relationship. The owner-ownee relationship is specific to React, while the parent-child relationship is simply the one you know and love from the DOM. In the example above, `Avatar` owns the `div`, `ProfilePic` and `ProfileLink` instances, and `div` is the **parent** (but not owner) of the `ProfilePic` and `ProfileLink` instances.
## Children
When you create a React component instance, you can include additional React components or JavaScript expressions between the opening and closing tags like this:
@@ -72,7 +68,6 @@ When you create a React component instance, you can include additional React com
`Parent` can read its children by accessing the special `this.props.children` prop. **`this.props.children` is an opaque data structure:** use the [React.Children utilities](/react/docs/top-level-api.html#react.children) to manipulate them.
### Child Reconciliation
**Reconciliation is the process by which React updates the DOM with each new render pass.** In general, children are reconciled according to the order in which they are rendered. For example, suppose two render passes generate the following respective markup:
@@ -91,7 +86,6 @@ When you create a React component instance, you can include additional React com
Intuitively, `<p>Paragraph 1</p>` was removed. Instead, React will reconcile the DOM by changing the text content of the first child and destroying the last child. React reconciles according to the *order* of the children.
### Stateful Children
For most components, this is not a big deal. However, for stateful components that maintain data in `this.state` across render passes, this can be very problematic.
@@ -111,7 +105,6 @@ In most cases, this can be sidestepped by hiding elements instead of destroying
</Card>
```
### Dynamic Children
The situation gets more complicated when the children are shuffled around (as in search results) or if new components are added onto the front of the list (as in streams). In these cases where the identity and state of each child must be maintained across render passes, you can uniquely identify each child by assigning it a `key`:
@@ -178,7 +171,6 @@ You can also key children by passing a ReactFragment object. See [Keyed Fragment
In React, data flows from owner to owned component through `props` as discussed above. This is effectively one-way data binding: owners bind their owned component's props to some value the owner has computed based on its `props` or `state`. Since this process happens recursively, data changes are automatically reflected everywhere they are used.
## A Note on Performance
You may be thinking that it's expensive to change data if there are a large number of nodes under an owner. The good news is that JavaScript is fast and `render()` methods tend to be quite simple, so in most applications this is extremely fast. Additionally, the bottleneck is almost always the DOM mutation and not JS execution. React will optimize this for you by using batching and change detection.

View File

@@ -47,7 +47,7 @@ var ProfileLink = React.createClass({
}
});
React.render(
ReactDOM.render(
<Avatar username="pwh" />,
document.getElementById('example')
);
@@ -57,7 +57,7 @@ React.render(
## 从属关系
上面例子中,`Avatar` 拥有 `ProfilePic``ProfileLink` 的实例。`拥有者` 就是给其它组件设置 `props` 的那个组件。更正式地说,
如果组件 `Y``render()` 方法是创建了组件 `X`,那么 `Y` 就拥有 `X`。上面讲过,组件不能修改自身的 `props` - 它们总是与它们拥有者设置的保持一致。这是保持用户界面一致性的关键性原则
如果组件 `Y``render()` 方法是创建了组件 `X`,那么 `Y` 就拥有 `X`。上面讲过,组件不能修改自身的 `props` - 它们总是与它们拥有者设置的保持一致。这是保持用户界面一致性的基本不变量
把从属关系与父子关系加以区别至关重要。从属关系是 React 特有的而父子关系简单来讲就是DOM 里的标签的关系。在上一个例子中,`Avatar` 拥有 `div``ProfilePic``ProfileLink` 实例,`div``ProfilePic``ProfileLink` 实例的**父级**(但不是拥有者)。
@@ -147,7 +147,8 @@ var MyComponent = React.createClass({
);
}
});
```
```javascript
// 正确 :)
var ListItemWrapper = React.createClass({
render: function() {
@@ -167,26 +168,7 @@ var MyComponent = React.createClass({
});
```
也可以传递 object 来做有 key 的子级。object 的 key 会被当作每个组件的 `key`。但是一定要牢记 JavaScript 并不总是保证属性的顺序会被保留。实际情况下浏览器一般会保留属性的顺序,**除了** 使用 32位无符号数字做为 key 的属性。数字型属性会按大小排序并且排在其它属性前面。一旦发生这种情况React 渲染组件的顺序就是混乱。可能在 key 前面加一个字符串前缀来避免:
```javascript
render: function() {
var items = {};
this.props.results.forEach(function(result) {
// 如果 result.id 看起来是一个数字(比如短哈希),那么
// 对象字面量的顺序就得不到保证。这种情况下,需要添加前缀
// 来确保 key 是字符串。
items['result-' + result.id] = <li>{result.text}</li>;
});
return (
<ol>
{items}
</ol>
);
}
```
也可以传递ReactFragment 对象 来做有 key 的子级。详见[Keyed Fragments](create-fragment.html)
## 数据流
@@ -200,5 +182,5 @@ React 里,数据通过上面介绍过的 `props` 从拥有者流向归属者
但是,有时候需要做细粒度的性能控制。这种情况下,可以重写 `shouldComponentUpdate()` 方法返回 false 来让 React 跳过对子树的处理。参考 [React reference docs](/react/docs/component-specs.html) 了解更多。
> 注意:
>
>
> 如果在数据变化时让 `shouldComponentUpdate()` 返回 falseReact 就不能保证用户界面同步。当使用它的时候一定确保你清楚到底做了什么,并且只在遇到明显性能问题的时候才使用它。不要低估 JavaScript 的速度DOM 操作通常才是慢的原因。

View File

@@ -0,0 +1,263 @@
---
id: reusable-components-it-IT
title: Componenti Riutilizzabili
permalink: reusable-components-it-IT.html
prev: multiple-components-it-IT.html
next: transferring-props-it-IT.html
---
Quando disegni interfacce, separa gli elementi comuni di design (bottoni, campi dei moduli, componenti di layout, etc.) in componenti riutilizzabili con interfacce ben definite. In questo modo, la prossima volta che dovrai costruire una nuova UI, puoi scrivere molto meno codice. Ciò significa tempi di sviluppo più brevi, meno bachi, e meno byte trasferiti sulla rete.
## Validazione delle Proprietà
Mentre la tua applicazione cresce, è utile assicurarsi che i tuoi componenti vengano usati correttamente. Ciò viene fatto permettendoti di specificare i `propTypes`. `React.PropTypes` esporta una gamma di validatori che possono essere usati per assicurarsi che i dati che ricevi siano validi. Quando ad una proprietà è assegnato un valore non valido, sarà mostrato un avvertimento nella console JavaScript. Nota che per motivi di prestazioni, `propTypes` è utilizzato soltanto nella modalità di sviluppo. Di seguito trovi un esempio che documenta i diversi validatori che vengono forniti:
```javascript
React.createClass({
propTypes: {
// Puoi dichiarare che una proprietà è uno specifico tipo primitivo JS. In
// maniera predefinita, questi sono tutti opzionali.
optionalArray: React.PropTypes.array,
optionalBool: React.PropTypes.bool,
optionalFunc: React.PropTypes.func,
optionalNumber: React.PropTypes.number,
optionalObject: React.PropTypes.object,
optionalString: React.PropTypes.string,
// Tutto ciò che può essere mostrato: numeri, stringhe, elementi, o un array
// (o frammento) contenente questi tipi.
optionalNode: React.PropTypes.node,
// Un elemento React.
optionalElement: React.PropTypes.element,
// Puoi anche dichiarare che una proprietà è un'istanza di una classe. Questo
// validatore usa l'operatore instanceof di JS.
optionalMessage: React.PropTypes.instanceOf(Message),
// Puoi assicurarti che la tua proprietà sia ristretta a valori specifici
// trattandoli come una enumerazione.
optionalEnum: React.PropTypes.oneOf(['News', 'Photos']),
// Un oggetto che può essere di uno tra diversi tipi
optionalUnion: React.PropTypes.oneOfType([
React.PropTypes.string,
React.PropTypes.number,
React.PropTypes.instanceOf(Message)
]),
// Un array di un tipo specificato
optionalArrayOf: React.PropTypes.arrayOf(React.PropTypes.number),
// Un oggetto con proprietà dai valori di un tipo specificato
optionalObjectOf: React.PropTypes.objectOf(React.PropTypes.number),
// Un oggetto che accetta una forma particolare
optionalObjectWithShape: React.PropTypes.shape({
color: React.PropTypes.string,
fontSize: React.PropTypes.number
}),
// Puoi concatenare ciascuna delle precedenti con `isRequired` per assicurarti
// che venga mostrato un avvertimento se la proprietà non viene impostata.
requiredFunc: React.PropTypes.func.isRequired,
// Un valore di un tipo qualsiasi
requiredAny: React.PropTypes.any.isRequired,
// Puoi inoltre specificare un validatore personalizzato. Deve restituire un
// oggetto di tipo Error se la validazione fallisce. Non lanciare eccezioni
// o utilizzare `console.warn`, in quanto non funzionerebbe all'interno di
// `oneOfType`.
customProp: function(props, propName, componentName) {
if (!/matchme/.test(props[propName])) {
return new Error('Validazione fallita!');
}
}
},
/* ... */
});
```
## Valori Predefiniti delle Proprietà
React ti permette di definire valori predefiniti per le tue `props` in una maniera molto dichiarativa:
```javascript
var ComponentWithDefaultProps = React.createClass({
getDefaultProps: function() {
return {
value: 'valore predefinito'
};
}
/* ... */
});
```
Il risultato di `getDefaultProps()` sarà conservato e usato per assicurarsi che `this.props.value` avrà sempre un valore se non è stato specificato dal componente proprietario. Ciò ti permette di utilizzare in sicurezza le tue proprietà senza dover scrivere codice fragile e ripetitivo per gestirlo da te.
## Trasferire le Proprietà: Una Scorciatoia
Un tipo comune di componente React è uno che estende un elemento basico HTML in maniera semplice. Spesso vorrai copiare qualsiasi attributo HTML passato al tuo componente all'elemento HTML sottostante per risparmiare del codice. Puoi usare la sintassi _spread_ di JSX per ottenerlo:
```javascript
var CheckLink = React.createClass({
render: function() {
// Questo prende ciascuna proprietà passata a CheckLink e la copia su <a>
return <a {...this.props}>{'√ '}{this.props.children}</a>;
}
});
ReactDOM.render(
<CheckLink href="/checked.html">
Clicca qui!
</CheckLink>,
document.getElementById('example')
);
```
## Figlio Singolo
Con `React.PropTypes.element` puoi specificare che solo un figlio unico possa essere passato come figli ad un componente.
```javascript
var MyComponent = React.createClass({
propTypes: {
children: React.PropTypes.element.isRequired
},
render: function() {
return (
<div>
{this.props.children} // Questo deve essere esattamente un elemento oppure lancerà un'eccezione.
</div>
);
}
});
```
## Mixin
I componenti sono la maniera migliore di riutilizzare il codice in React, ma a volte componenti molto diversi possono condividere funzionalità comune. Questi sono a volte chiamate [responsabilità trasversali](https://en.wikipedia.org/wiki/Cross-cutting_concern). React fornisce i `mixin` per risolvere questo problema.
Un caso d'uso comune è un componente che desidera aggiornarsi ad intervalli di tempo. È facile usare `setInterval()`, ma è anche importante cancellare la chiamata ripetuta quando non è più necessaria per liberare memoria. React fornisce dei [metodi del ciclo di vita](/react/docs/working-with-the-browser.html#component-lifecycle) che ti permettono di sapere quando un componente sta per essere creato o distrutto. Creiamo un semplice mixin che usa questi metodi per fornire una facile funzione `setInterval()` che sarà automaticamente rimossa quando il tuo componente viene distrutto.
```javascript
var SetIntervalMixin = {
componentWillMount: function() {
this.intervals = [];
},
setInterval: function() {
this.intervals.push(setInterval.apply(null, arguments));
},
componentWillUnmount: function() {
this.intervals.forEach(clearInterval);
}
};
var TickTock = React.createClass({
mixins: [SetIntervalMixin], // Usa il mixin
getInitialState: function() {
return {seconds: 0};
},
componentDidMount: function() {
this.setInterval(this.tick, 1000); // Chiama un metodo del mixin
},
tick: function() {
this.setState({seconds: this.state.seconds + 1});
},
render: function() {
return (
<p>
React has been running for {this.state.seconds} seconds.
</p>
);
}
});
ReactDOM.render(
<TickTock />,
document.getElementById('example')
);
```
Una caratteristica interessante dei mixin è che, se un componente usa molteplici mixin e diversi mixin definiscono lo stesso metodo del ciclo di vita (cioè diversi mixin desiderano effettuare una pulizia quando il componente viene distrutto), viene garantito che tutti i metodi del ciclo di vita verranno chiamati. I metodi definiti nei mixin vengono eseguiti nell'ordine in cui i mixin sono elencati, seguiti da una chiamata al metodo definito nel componente.
## Classi ES6
Puoi anche definire le tue classi React come pure classi JavaScript. Per esempio, usando la sintassi delle classi ES6:
```javascript
class HelloMessage extends React.Component {
render() {
return <div>Ciao {this.props.name}</div>;
}
}
ReactDOM.render(<HelloMessage name="Sebastian" />, mountNode);
```
L'API è simile a `React.createClass` con l'eccezione del metodo `getInitialState`. Anziché fornire un metodo `getInitialState` a parte, imposti la tua proprietà `state` nel costruttore.
Un'altra differenza è che `propTypes` e `defaultProps` sono definite come proprietà del costruttore anziché nel corpo della classe.
```javascript
export class Counter extends React.Component {
constructor(props) {
super(props);
this.state = {count: props.initialCount};
}
tick() {
this.setState({count: this.state.count + 1});
}
render() {
return (
<div onClick={this.tick.bind(this)}>
Click: {this.state.count}
</div>
);
}
}
Counter.propTypes = { initialCount: React.PropTypes.number };
Counter.defaultProps = { initialCount: 0 };
```
### Niente Binding Automatico
I metodi seguono la stessa semantica delle classi ES6 regolari, ciò significa che non effettuano il binding automatico di `this` all'istanza. Dovrai pertanto usare esplicitamente `.bind(this)` oppure [le funzioni freccia](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions) `=>`.
### Niente Mixin
Sfortunatamente, ES6 è stato lanciato senza alcun supporto per i mixin. Di conseguenza non vi è alcun supporto per i mixin quando usi React con le classi ES6. Stiamo lavorando per rendere più semplice il supporto dei relativi casi d'uso senza ricorrere ai mixin.
## Funzioni Prive di Stato
Puoi anche definire le tue classi React come semplici funzioni JavaScript. Ad esempio usando la sintassi della funzione priva di stato:
```javascript
function HelloMessage(props) {
return <div>Ciao {props.name}</div>;
}
ReactDOM.render(<HelloMessage name="Sebastian" />, mountNode);
```
Oppure usando la nuova sintassi freccia di ES6:
```javascript
var HelloMessage = (props) => <div>Ciao {props.name}</div>;
ReactDOM.render(<HelloMessage name="Sebastian" />, mountNode);
```
Questa API semplificata dei componenti è intesa per i componenti che sono pure funzioni dele proprietà. Questi componenti non devono trattenere stato interno, non hanno istanze di supporto, e non posseggono metodi di ciclo di vita. Sono pure trasformate funzionali del loro input, con zero codice boilerplate.
> NOTA:
>
> Poiché le funzioni prive di stato non hanno un'istanza di supporto, non puoi assegnare un ref a un componente creato con una funzione priva di stato. Normalmente questo non è un problema, poiché le funzioni prive di stato non forniscono un'API imperativa. Senza un'API imperativa, non puoi comunque fare molto con un'istanza. Tuttavia, se un utente desidera trovare il nodo DOM di un componente creato con una funzione priva di stato, occorre avvolgere il componente in un altro componente dotato di stato (ad es. un componente classe ES6) e assegnare il ref al componente dotato di stato.
In un mondo ideale, la maggior parte dei tuoi componenti sarebbero funzioni prive di stato poiché questi componenti privi di stato seguono un percorso più rapido all'interno del core di React. Questo è un pattern raccomandato, quando possibile.

View File

@@ -107,7 +107,7 @@ var CheckLink = React.createClass({
}
});
React.render(
ReactDOM.render(
<CheckLink href="/checked.html">
Click here!
</CheckLink>,
@@ -175,7 +175,7 @@ var TickTock = React.createClass({
}
});
React.render(
ReactDOM.render(
<TickTock />,
document.getElementById('example')
);
@@ -193,7 +193,7 @@ class HelloMessage extends React.Component {
return <div>Hello {this.props.name}</div>;
}
}
React.render(<HelloMessage name="Sebastian" />, mountNode);
ReactDOM.render(<HelloMessage name="Sebastian" />, mountNode);
```
APIは `getInitialState` という例外を除き、 `React.createClass` と同じです。APIが異なっている `getInitialState` メソッドを提供する代わりに、コンストラクタの中に `state` プロパティをセットします。
@@ -227,4 +227,4 @@ Counter.defaultProps = { initialCount: 0 };
### ミックスインはありません
不幸なことに、ES6はミックスインのサポートを行いません。それゆえ、ReactをES6のクラスと一緒に使う際にはミックスインのサポートはありません。代わりに、ミックスインに頼ることなくそれらのユースケースをサポートするのが簡単になるよう努力しています。
不幸なことに、ES6はミックスインのサポートを行いません。それゆえ、ReactをES6のクラスと一緒に使う際にはミックスインのサポートはありません。代わりに、ミックスインに頼ることなくそれらのユースケースをサポートするのが簡単になるよう努力しています。

View File

@@ -108,7 +108,7 @@ var CheckLink = React.createClass({
}
});
React.render(
ReactDOM.render(
<CheckLink href="/checked.html">
Click here!
</CheckLink>,
@@ -176,7 +176,7 @@ var TickTock = React.createClass({
}
});
React.render(
ReactDOM.render(
<TickTock />,
document.getElementById('example')
);
@@ -195,7 +195,7 @@ class HelloMessage extends React.Component {
return <div>Hello {this.props.name}</div>;
}
}
React.render(<HelloMessage name="Sebastian" />, mountNode);
ReactDOM.render(<HelloMessage name="Sebastian" />, mountNode);
```
API는 `getInitialState`를 제외하고 `React.createClass`와 유사합니다. 별도의 `getInitialState` 메소드 대신에, 필요한 `state` 프로퍼티를 생성자에서 설정할 수 있습니다.

View File

@@ -8,7 +8,6 @@ next: transferring-props.html
When designing interfaces, break down the common design elements (buttons, form fields, layout components, etc.) into reusable components with well-defined interfaces. That way, the next time you need to build some UI, you can write much less code. This means faster development time, fewer bugs, and fewer bytes down the wire.
## Prop Validation
As your app grows it's helpful to ensure that your components are used correctly. We do this by allowing you to specify `propTypes`. `React.PropTypes` exports a range of validators that can be used to make sure the data you receive is valid. When an invalid value is provided for a prop, a warning will be shown in the JavaScript console. Note that for performance reasons `propTypes` is only checked in development mode. Here is an example documenting the different validators provided:
@@ -26,7 +25,7 @@ React.createClass({
optionalString: React.PropTypes.string,
// Anything that can be rendered: numbers, strings, elements or an array
// containing these types.
// (or fragment) containing these types.
optionalNode: React.PropTypes.node,
// A React element.
@@ -79,7 +78,6 @@ React.createClass({
});
```
## Default Prop Values
React lets you define default values for your `props` in a very declarative way:
@@ -97,10 +95,9 @@ var ComponentWithDefaultProps = React.createClass({
The result of `getDefaultProps()` will be cached and used to ensure that `this.props.value` will have a value if it was not specified by the parent component. This allows you to safely just use your props without having to write repetitive and fragile code to handle that yourself.
## Transferring Props: A Shortcut
A common type of React component is one that extends a basic HTML element in a simple way. Often you'll want to copy any HTML attributes passed to your component to the underlying HTML element to save typing. You can use the JSX _spread_ syntax to achieve this:
A common type of React component is one that extends a basic HTML element in a simple way. Often you'll want to copy any HTML attributes passed to your component to the underlying HTML element. To save typing, you can use the JSX _spread_ syntax to achieve this:
```javascript
var CheckLink = React.createClass({
@@ -110,7 +107,7 @@ var CheckLink = React.createClass({
}
});
React.render(
ReactDOM.render(
<CheckLink href="/checked.html">
Click here!
</CheckLink>,
@@ -155,7 +152,7 @@ var SetIntervalMixin = {
this.intervals.push(setInterval.apply(null, arguments));
},
componentWillUnmount: function() {
this.intervals.map(clearInterval);
this.intervals.forEach(clearInterval);
}
};
@@ -179,7 +176,7 @@ var TickTock = React.createClass({
}
});
React.render(
ReactDOM.render(
<TickTock />,
document.getElementById('example')
);
@@ -197,7 +194,7 @@ class HelloMessage extends React.Component {
return <div>Hello {this.props.name}</div>;
}
}
React.render(<HelloMessage name="Sebastian" />, mountNode);
ReactDOM.render(<HelloMessage name="Sebastian" />, mountNode);
```
The API is similar to `React.createClass` with the exception of `getInitialState`. Instead of providing a separate `getInitialState` method, you set up your own `state` property in the constructor.
@@ -232,3 +229,29 @@ Methods follow the same semantics as regular ES6 classes, meaning that they don'
### No Mixins
Unfortunately ES6 launched without any mixin support. Therefore, there is no support for mixins when you use React with ES6 classes. Instead, we're working on making it easier to support such use cases without resorting to mixins.
## Stateless Functions
You may also define your React classes as a plain JavaScript function. For example using the stateless function syntax:
```javascript
function HelloMessage(props) {
return <div>Hello {props.name}</div>;
}
ReactDOM.render(<HelloMessage name="Sebastian" />, mountNode);
```
Or using the new ES6 arrow syntax:
```javascript
var HelloMessage = (props) => <div>Hello {props.name}</div>;
ReactDOM.render(<HelloMessage name="Sebastian" />, mountNode);
```
This simplified component API is intended for components that are pure functions of their props. These components must not retain internal state, do not have backing instances, and do not have the component lifecycle methods. They are pure functional transforms of their input, with zero boilerplate.
> NOTE:
>
> Because stateless functions don't have a backing instance, you can't attach a ref to a stateless function component. Normally this isn't an issue, since stateless functions do not provide an imperative API. Without an imperative API, there isn't much you could do with an instance anyway. However, if a user wants to find the DOM node of a stateless function component, they must wrap the component in a stateful component (eg. ES6 class component) and attach the ref to the stateful wrapper component.
In an ideal world, most of your components would be stateless functions because these stateless components can follow a faster code path within the React core. This is the recommended pattern, when possible.

View File

@@ -26,7 +26,7 @@ React.createClass({
optionalString: React.PropTypes.string,
// 所有可以被渲染的对象:数字,
// 字符串DOM 元素或包含这些类型的数组。
// 字符串DOM 元素或包含这些类型的数组(or fragment)
optionalNode: React.PropTypes.node,
// React 元素
@@ -105,7 +105,7 @@ var CheckLink = React.createClass({
}
});
React.render(
ReactDOM.render(
<CheckLink href="/checked.html">
Click here!
</CheckLink>,
@@ -150,7 +150,7 @@ var SetIntervalMixin = {
this.intervals.push(setInterval.apply(null, arguments));
},
componentWillUnmount: function() {
this.intervals.map(clearInterval);
this.intervals.forEach(clearInterval);
}
};
@@ -174,10 +174,57 @@ var TickTock = React.createClass({
}
});
React.render(
ReactDOM.render(
<TickTock />,
document.getElementById('example')
);
```
关于 mixin 值得一提的优点是,如果一个组件使用了多个 mixin并用有多个 mixin 定义了同样的生命周期方法(如:多个 mixin 都需要在组件销毁时做资源清理操作),所有这些生命周期方法都保证会被执行到。方法执行顺序是:首先按 mixin 引入顺序执行 mixin 里方法,最后执行组件内定义的方法。
## ES6 Classes
你也可以以一个简单的JavaScript 类来定义你的React classes。使用ES6 class的例子:
```javascript
class HelloMessage extends React.Component {
render() {
return <div>Hello {this.props.name}</div>;
}
}
ReactDOM.render(<HelloMessage name="Sebastian" />, mountNode);
```
API近似于 `React.createClass` 除了 `getInitialState`。 你应该在构造函数里设置你的`state`,而不是提供一个单独的 `getInitialState` 方法。
另一个不同是 `propTypes``defaultProps` 在构造函数而不是class body里被定义为属性。
```javascript
export class Counter extends React.Component {
constructor(props) {
super(props);
this.state = {count: props.initialCount};
}
tick() {
this.setState({count: this.state.count + 1});
}
render() {
return (
<div onClick={this.tick.bind(this)}>
Clicks: {this.state.count}
</div>
);
}
}
Counter.propTypes = { initialCount: React.PropTypes.number };
Counter.defaultProps = { initialCount: 0 };
```
### 无自动绑定
方法遵循正式的ES6 class的语义意味着它们不会自动绑定`this`到实例上。你必须显示的使用`.bind(this)` or [箭头函数](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/Arrow_functions) `=>`.
### 没有 Mixins
不幸的是ES6的发布没有任何mixin的支持。因此当你在ES6 classes下使用React时不支持mixins。作为替代我们正在努力使它更容易支持这些用例不依靠mixins。

View File

@@ -0,0 +1,163 @@
---
id: transferring-props-it-IT
title: Trasferimento delle Proprietà
permalink: transferring-props-it-IT.html
prev: reusable-components-it-IT.html
next: forms-it-IT.html
---
Un pattern comune in React è l'uso di un'astrazione per esporre un componente. Il componente esterno espone una semplice proprietà per effettuare un'azione che può richiedere un'implementazione più complessa.
Puoi usare gli [attributi spread di JSX](/react/docs/jsx-spread.html) per unire le vecchie props con valori aggiuntivi:
```javascript
<Component {...this.props} more="values" />
```
Se non usi JSX, puoi usare qualsiasi helper come l'API `Object.assign` di ES6, o il metodo `_.extend` di Underscore:
```javascript
React.createElement(Component, Object.assign({}, this.props, { more: 'values' }));
```
Nel resto di questo tutorial vengono illustrate le best practices, usando JSX e sintassi sperimentale di ES7.
## Trasferimento Manuale
Nella maggior parte dei casi dovresti esplicitamente passare le proprietà. Ciò assicura che venga esposto soltanto un sottoinsieme dell'API interna, del cui funzionamento si è certi.
```javascript
var FancyCheckbox = React.createClass({
render: function() {
var fancyClass = this.props.checked ? 'FancyChecked' : 'FancyUnchecked';
return (
<div className={fancyClass} onClick={this.props.onClick}>
{this.props.children}
</div>
);
}
});
ReactDOM.render(
<FancyCheckbox checked={true} onClick={console.log.bind(console)}>
Ciao mondo!
</FancyCheckbox>,
document.getElementById('example')
);
```
E se aggiungessimo una proprietà `name`? O una proprietà `title`? O `onMouseOver`?
## Trasferire con `...` in JSX
> NOTA:
>
> La sintassi `...` fa parte della proposta Object Rest Spread. Questa proposta è in processo di diventare uno standard. Consulta la sezione [Proprietà Rest e Spread ...](/react/docs/transferring-props.html#rest-and-spread-properties-...) di seguito per maggiori dettagli.
A volte passare manualmente ciascuna proprietà può essere noioso e fragile. In quei casi puoi usare l'[assegnamento destrutturante](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment) con le proprietà residue per estrarre un insieme di proprietà sconosciute.
Elenca tutte le proprietà che desideri consumare, seguite da `...other`.
```javascript
var { checked, ...other } = this.props;
```
Ciò assicura che vengano passate tutte le proprietà TRANNE quelle che stai consumando tu stesso.
```javascript
var FancyCheckbox = React.createClass({
render: function() {
var { checked, ...other } = this.props;
var fancyClass = checked ? 'FancyChecked' : 'FancyUnchecked';
// `other` contiene { onClick: console.log } ma non la proprietà checked
return (
<div {...other} className={fancyClass} />
);
}
});
ReactDOM.render(
<FancyCheckbox checked={true} onClick={console.log.bind(console)}>
Ciao mondo!
</FancyCheckbox>,
document.getElementById('example')
);
```
> NOTA:
>
> Nell'esempio precedente, la proprietà `checked` è anche un attributo DOM valido. Se non utilizzassi la destrutturazione in questo modo, potresti inavvertitamente assegnarlo al `div`.
Usa sempre il pattern di destrutturazione quando trasferisci altre proprietà sconosciute in `other`.
```javascript
var FancyCheckbox = React.createClass({
render: function() {
var fancyClass = this.props.checked ? 'FancyChecked' : 'FancyUnchecked';
// ANTI-PATTERN: `checked` sarebbe passato al componente interno
return (
<div {...this.props} className={fancyClass} />
);
}
});
```
## Consumare e Trasferire la Stessa Proprietà
Se il tuo componente desidera consumare una proprietà, ma anche passarla ad altri, puoi passarla esplicitamente mediante `checked={checked}`. Questo è preferibile a passare l'intero oggetto `this.props` dal momento che è più facile effettuarne il linting e il refactoring.
```javascript
var FancyCheckbox = React.createClass({
render: function() {
var { checked, title, ...other } = this.props;
var fancyClass = checked ? 'FancyChecked' : 'FancyUnchecked';
var fancyTitle = checked ? 'X ' + title : 'O ' + title;
return (
<label>
<input {...other}
checked={checked}
className={fancyClass}
type="checkbox"
/>
{fancyTitle}
</label>
);
}
});
```
> NOTA:
>
> L'ordine è importante. Mettendo il `{...other}` prima delle tue proprietà JSX ti assicuri che il consumatore del tuo componente non possa ridefinirle. Nell'esempio precedente, abbiamo garantito che l'elemento input sarà del tipo `"checkbox"`.
## Proprietà Rest e Spread `...`
Le proprietà Rest ti permettono di estrarre le proprietà residue di un oggetto in un nuovo oggetto. Vengono escluse tutte le altre proprietà elencate nel pattern di destrutturazione.
Questa è un'implementazione sperimentale di una [proposta ES7](https://github.com/sebmarkbage/ecmascript-rest-spread).
```javascript
var { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
x; // 1
y; // 2
z; // { a: 3, b: 4 }
```
> Nota:
>
> Questa proposta ha raggiunto lo stadio 2 ed è attivata in modo predefinito in Babel. Vecchie versioni di Babel potrebbero richiedere l'abilitazione esplicita di questa trasformazione con `babel --optional es7.objectRestSpread`
## Trasferire con Underscore
Se non usi JSX, puoi usare una libreria per ottenere il medesimo pattern. Underscore supporta `_.omit` per omettere delle proprietà ed `_.extend` per copiare le proprietà in un nuovo oggetto.
```javascript
var FancyCheckbox = React.createClass({
render: function() {
var checked = this.props.checked;
var other = _.omit(this.props, 'checked');
var fancyClass = checked ? 'FancyChecked' : 'FancyUnchecked';
return (
React.DOM.div(_.extend({}, other, { className: fancyClass }))
);
}
});
```

View File

@@ -39,7 +39,7 @@ var FancyCheckbox = React.createClass({
);
}
});
React.render(
ReactDOM.render(
<FancyCheckbox checked={true} onClick={console.log.bind(console)}>
Hello world!
</FancyCheckbox>,
@@ -75,7 +75,7 @@ var FancyCheckbox = React.createClass({
);
}
});
React.render(
ReactDOM.render(
<FancyCheckbox checked={true} onClick={console.log.bind(console)}>
Hello world!
</FancyCheckbox>,

View File

@@ -37,7 +37,7 @@ var FancyCheckbox = React.createClass({
);
}
});
React.render(
ReactDOM.render(
<FancyCheckbox checked={true} onClick={console.log.bind(console)}>
세상아 안녕!
</FancyCheckbox>,
@@ -50,7 +50,7 @@ React.render(
## JSX에서 `...`를 사용해 전달하기
> 주의:
>
>
> 아래의 예제에서는 실험적인 ES7 문법이 사용되었기 때문에 `--harmony ` 플래그가 필요합니다. 브라우저에서 JSX 변환기를 사용 중이라면, `<script type="text/jsx;harmony=true">`를 사용해 스크립트를 작성하세요. 자세히 알아보려면 아래의 [잔여 프로퍼티와 스프레드 프로퍼티 ...](/react/docs/transferring-props-ko-KR.html#rest-and-spread-properties-...)를 확인하세요.
때로는 모든 프로퍼티를 일일이 전달 하는것은 지루하고 덧없는 작업입니다. 이 경우 [구조 해체 할당(destructuring assignment)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment)을 다른 프로퍼티를 함께 사용해 미상의 프로퍼티를 추출할 수 있습니다.
@@ -74,7 +74,7 @@ var FancyCheckbox = React.createClass({
);
}
});
React.render(
ReactDOM.render(
<FancyCheckbox checked={true} onClick={console.log.bind(console)}>
세상아 안녕!
</FancyCheckbox>,

View File

@@ -37,7 +37,7 @@ var FancyCheckbox = React.createClass({
);
}
});
React.render(
ReactDOM.render(
<FancyCheckbox checked={true} onClick={console.log.bind(console)}>
Hello world!
</FancyCheckbox>,
@@ -74,7 +74,7 @@ var FancyCheckbox = React.createClass({
);
}
});
React.render(
ReactDOM.render(
<FancyCheckbox checked={true} onClick={console.log.bind(console)}>
Hello world!
</FancyCheckbox>,

View File

@@ -11,18 +11,17 @@ React 里有一个非常常用的模式就是对组件做一层抽象。组件
可以使用 [JSX 展开属性](/react/docs/jsx-spread-zh-CN.html) 来合并现有的 props 和其它值:
```javascript
return <Component {...this.props} more="values" />;
<Component {...this.props} more="values" />
```
如果不使用 JSX可以使用一些对象辅助方法如 ES6 的 `Object.assign` 或 Underscore `_.extend`
```javascript
return Component(Object.assign({}, this.props, { more: 'values' }));
React.createElement(Component, Object.assign({}, this.props, { more: 'values' }));
```
下面的教程介绍一些最佳实践。使用了 JSX 和 ES7 的还在试验阶段的特性。
## 手动传递
大部分情况下你应该显式地向下传递 props。这样可以确保只公开你认为是安全的内部 API 的子集。
@@ -38,7 +37,7 @@ var FancyCheckbox = React.createClass({
);
}
});
React.render(
ReactDOM.render(
<FancyCheckbox checked={true} onClick={console.log.bind(console)}>
Hello world!
</FancyCheckbox>,
@@ -48,9 +47,12 @@ React.render(
`name` 这个属性怎么办?还有 `title``onMouseOver` 这些 props
## 在 JSX 里使用 `...` 传递
> 注意:
>
> 在下面的例子中,`--harmony ` 标志是必须的因为这个语法是ES7的实验性语法。如果用浏览器中的JSX转换器以 `<script type="text/jsx;harmony=true">`简单的打开你脚本就行了。详见[Rest and Spread Properties ...](/react/docs/transferring-props.html#rest-and-spread-properties-...)
有时把所有属性都传下去是不安全或啰嗦的。这时可以使用 [解构赋值](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment) 中的剩余属性特性来把未知属性批量提取出来。
列出所有要当前使用的属性,后面跟着 `...other`
@@ -72,7 +74,7 @@ var FancyCheckbox = React.createClass({
);
}
});
React.render(
ReactDOM.render(
<FancyCheckbox checked={true} onClick={console.log.bind(console)}>
Hello world!
</FancyCheckbox>,
@@ -81,7 +83,7 @@ React.render(
```
> 注意:
>
>
> 上面例子中,`checked` 属性也是一个有效的 DOM 属性。如果你没有使用解构赋值,那么可能无意中把它传下去。
在传递这些未知的 `other` 属性时,要经常使用解构赋值模式。
@@ -124,7 +126,7 @@ var FancyCheckbox = React.createClass({
```
> 注意:
>
>
> 顺序很重要,把 `{...other}` 放到 JSX props 前面会使它不被覆盖。上面例子中我们可以保证 input 的 type 是 `"checkbox"`。

165
docs/docs/07-forms.it-IT.md Normal file
View File

@@ -0,0 +1,165 @@
---
id: forms-it-IT
title: Moduli
permalink: forms-it-IT.html
prev: transferring-props-it-IT.html
next: working-with-the-browser-it-IT.html
---
I componenti dei moduli come `<input>`, `<textarea>` e `<option>` differiscono dagli altri componenti nativi poiché possono essere alterati tramite interazione dell'utente. Questi componenti forniscono interfacce che rendono più semplice gestire i moduli in risposta all'interazione dell'utente.
Per maggiori informazioni sugli eventi dell'elemento `<form>` consulta [Eventi dei Moduli](/react/docs/events.html#form-events).
## Proprietà Interattive
I componenti dei moduli supportano un numero di proprietà che vengono modificate dall'interazione dell'utente:
* `value`, supportato dai elementi `<input>` e `<textarea>`.
* `checked`, supportato dagli elementi `<input>` dal tipo `checkbox` o `radio`.
* `selected`, supportato dagli elementi `<option>`.
In HTML, in valore di `<textarea>` è impostato tramite un nodo di testo figlio. In React, devi invece usare la proprietà `value`.
I componenti dei moduli ti permettono di reagire ai cambiamenti impostando una callback come proprietà `onChange`. La proprietà `onChange` funziona in tutti i browser e viene scatenata in risposta all'interazione dell'utente quando:
* Il `value` di `<input>` o `<textarea>` cambia.
* Lo stato `checked` di `<input>` cambia.
* Lo stato `selected` di `<option>` cambia.
Come tutti gli eventi DOM, la proprietà `onChange` è supportata su tutti i componenti nativi e può essere usata per gestire la propagazione di eventi di cambiamento.
> Nota:
>
> Per `<input>` e `<textarea>`, `onChange` rimpiazza — e dovrebbe generalmente essere utilizzata in sostituzione — il gestore di eventi [`oninput`](https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/oninput) nativo del DOM.
## Componenti Controllati
Un `<input>` il cui `value` è impostato è un componente *controllato*. In un `<input>` controllato, il valore dell'elemento visualizzato si riflette sempre nella sua proprietà `value`. Ad esempio:
```javascript
render: function() {
return <input type="text" value="Ciao!" />;
}
```
Ciò visualizzerà un input che ha sempre il valore di `value` impostato a `Ciao!`. Ciascuna immissione dell'utente non avrà effetto sull'elemento visualizzato poiché React ha dichiarato il suo `value` pari a `Ciao!`. Se volessi aggiornare il `value` in risposta all'input dell'utente, puoi usare l'evento `onChange`:
```javascript
getInitialState: function() {
return {value: 'Ciao!'};
},
handleChange: function(event) {
this.setState({value: event.target.value});
},
render: function() {
var value = this.state.value;
return <input type="text" value={value} onChange={this.handleChange} />;
}
```
In questo esempio, stiamo semplicemente accettando il valore più recente fornito dall'utente e aggiornando la proprietà `value` del componente `<input>`. Questo pattern semplifica l'implementazione di interfacce che rispondono o validano l'interazione dell'utente. Ad esempio:
```javascript
handleChange: function(event) {
this.setState({value: event.target.value.substr(0, 140)});
}
```
Così si può accettare l'input dell'utente ma ne tronca il valore ai primi 140 caratteri.
### Potenziali Problemi con Checkbox e Radio Button
Fai attenzione che, allo scopo di normalizzare la gestione del cambiamento degli elementi checkbox e radio button, React usa un evento `click` al posto di un evento `change`. Nella maggior parte dei casi questo funziona nel modo previsto, tranne quando viene usato `preventDefault` in un gestore dell'evento `change`. `preventDefault` impedisce al browser di aggiornare visualmente l'input, anche se `checked` cambia il suo valore. Questo può essere evitato rimuovendo la chiamata a `preventDefault`, oppure effettuando il cambio del valore di `checked` tramite `setTimeout`.
## Componenti Non Controllati
Un `<input>` che non fornisce un `value` (o lo imposta a `null`) è un componente *non controllato*. In un `<input>` non controllato, il valore dell'elemento visualizzato rifletterà l'input dell'utente. Ad esempio:
```javascript
render: function() {
return <input type="text" />;
}
```
Questo visualizzerà un campo di input il cui valore iniziale è vuoto. Ciascun input dell'utente si rifletterà immediatamente nell'elemento visualizzato. Se desideri reagire ai cambiamenti del valore, puoi usare il gestore di eventi `onChange` proprio come con i componenti controllati.
### Valore Predefinito
Se desideri inizializzare il componente con un valore non vuoto, puoi fornire una proprietà `defaultValue`. Ad esempio:
```javascript
render: function() {
return <input type="text" defaultValue="Ciao!" />;
}
```
Questo esempio funzionerà in maniera simile all'esempio precedente sui **Componenti Controllati**.
Similmente, `<input>` supporta `defaultChecked` e `<select>` supporta `defaultValue`.
> Nota:
>
> Le proprietà `defaultValue` e `defaultChecked` sono usate soltanto durante il rendering iniziale. Se devi aggiornare il valore in un rendering successivo, dovrai usare un [componente controllato](#controlled-components).
## Argomenti Avanzati
### Perché Componenti Controllati?
Usare componenti di moduli come `<input>` in React presenta una difficoltà aggiuntiva, assente quando si scrive un modulo tradizionale in HTML. Ad esempio, in HTML:
```html
<input type="text" name="title" value="Senza titolo" />
```
Questo visualizza un campo di input *inizializzato* con il valore `Senza titolo`. Quando l'utente modifica il campo, la *proprietà* `value` del nodo cambierà. Tuttavia, `node.getAttribute('value')` restituirà ancora il valore usato durante l'inizializzazione, `Senza titolo`.
Diversamente dall'HTML, i componenti React devono rappresentare lo stato della vista in ciascun momento e non soltanto durante l'inizializzazione. Ad esempio, in React:
```javascript
render: function() {
return <input type="text" name="title" value="Senza titolo" />;
}
```
Dal momento che questo metodo descrive la vista in ogni momento, il valore del campo di testo deve *sempre* essere `Senza titolo`.
### Perché il Valore della Textarea?
In HTML, il valore di `<textarea>` è solitamente impostato usando un nodo di testo figlio:
```html
<!-- antipattern: NON FARLO! -->
<textarea name="description">Questa è la descrizione.</textarea>
```
Per l'HTML, questo approccio permette agli sviluppatori di fornire facilmente valori su più righe. Tuttavia, dal momento che React è JavaScript, non abbiamo limitazioni sulle stringhe e possiamo usare `\n` se desideriamo andare a capo. In un mondo in cui abbiamo `value` e `defaultValue`, il ruolo giocato dal nodo figlio è ambiguo. Per questa ragione, non dovresti utilizzare il nodo figlio quando imposti il valore delle `<textarea>`:
```javascript
<textarea name="description" value="Questa è la descrizione." />
```
Se tuttavia decidi di *usare* il nodo di testo figlio, questo si comporterà come `defaultValue`.
### Perché il Value di Select?
L'elemento `<option>` selezionato in un elemento HTML `<select>` è normalmente specificato attraverso l'attributo `selected` dell'opzione stessa. In React, allo scopo di rendere i componenti più semplici da manipolare, viene invece adottato il formato seguente:
```javascript
<select value="B">
<option value="A">Arancia</option>
<option value="B">Banana</option>
<option value="C">Ciliegia</option>
</select>
```
Per creare un componente non controllato, viene invece usato `defaultValue`.
> Nota:
>
> Puoi passare un array come valore dell'attributo `value`, se desideri selezionare più opzioni in un tag `select` a scelta multipla: `<select multiple={true} value={['B', 'C']}>`.

View File

@@ -32,7 +32,6 @@ Like all DOM events, the `onChange` prop is supported on all native components a
>
> For `<input>` and `<textarea>`, `onChange` supersedes — and should generally be used instead of — the DOM's built-in [`oninput`](https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/oninput) event handler.
## Controlled Components
An `<input>` with `value` set is a *controlled* component. In a controlled `<input>`, the value of the rendered element will always reflect the `value` prop. For example:
@@ -68,6 +67,9 @@ In this example, we are simply accepting the newest value provided by the user a
This would accept user input but truncate the value to the first 140 characters.
### Potential Issues With Checkboxes and Radio Buttons
Be aware that, in an attempt to normalize change handling for checkbox and radio inputs, React uses a `click` event in place of a `change` event. For the most part this behaves as expected, except when calling `preventDefault` in a `change` handler. `preventDefault` stops the browser from visually updating the input, even if `checked` gets toggled. This can be worked around either by removing the call to `preventDefault`, or putting the toggle of `checked` in a `setTimeout`.
## Uncontrolled Components
@@ -91,7 +93,7 @@ If you want to initialize the component with a non-empty value, you can supply a
}
```
This example will function much like the **Controlled Components** example above.
This example will function much like the **Uncontrolled Components** example above.
Likewise, `<input>` supports `defaultChecked` and `<select>` supports `defaultValue`.
@@ -99,10 +101,8 @@ Likewise, `<input>` supports `defaultChecked` and `<select>` supports `defaultVa
>
> The `defaultValue` and `defaultChecked` props are only used during initial render. If you need to update the value in a subsequent render, you will need to use a [controlled component](#controlled-components).
## Advanced Topics
### Why Controlled Components?
Using form components such as `<input>` in React presents a challenge that is absent when writing traditional form HTML. For example, in HTML:
@@ -123,7 +123,6 @@ Unlike HTML, React components must represent the state of the view at any point
Since this method describes the view at any point in time, the value of the text input should *always* be `Untitled`.
### Why Textarea Value?
In HTML, the value of `<textarea>` is usually set using its children:
@@ -141,7 +140,6 @@ For HTML, this easily allows developers to supply multiline values. However, sin
If you *do* decide to use children, they will behave like `defaultValue`.
### Why Select Value?
The selected `<option>` in an HTML `<select>` is normally specified through that option's `selected` attribute. In React, in order to make components easier to manipulate, the following format is adopted instead:

View File

@@ -7,29 +7,33 @@ next: working-with-the-browser-zh-CN.html
---
诸如 `<input>``<textarea>``<option>` 这样的表单组件不同于其他组件,因为他们可以通过用户交互发生变化。这些组件提供的界面使响应用户交互的表单数据处理更加容易。
关于 `<form>` 事件详情请查看 [表单事件](/react/docs/events-zh-CN.html#form-events)。
## 交互属性
## 交互属性
表单组件支持几个受用户交互影响的属性:
* `value`,用于 `<input>``<textarea>` 组件。
* `checked`,用于类型为 `checkbox` 或者 `radio``<input>` 组件。
* `selected`,用于 `<option>` 组件。
在 HTML 中,`<textarea>` 的值通过子节点设置;在 React 中则应该使用 `value` 代替。
在 HTML 中,`<textarea>` 的值通过子节点设置;在 React 中则应该使用 `value` 代替。
表单组件可以通过 `onChange` 回调函数来监听组件变化。当用户做出以下交互时,`onChange` 执行并通过浏览器做出响应:
* `<input>``<textarea>``value` 发生变化时。
* `<input>``checked` 状态改变时。
* `<option>``selected` 状态改变时。
和所有 DOM 事件一样,所有的 HTML 原生组件都支持 `onChange` 属性,而且可以用来监听冒泡的 `change` 事件。
## 受限组件
和所有 DOM 事件一样,所有的 HTML 原生组件都支持 `onChange` 属性,而且可以用来监听冒泡的 `change` 事件。
> 注意:
>
> 对于 `<input>` and `<textarea>` `onChange` 替代 — 一般应该用来替代 — the DOM's 内建的 [`oninput`](https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/oninput) 事件处理。
## 受限组件
设置了 `value``<input>` 是一个*受限*组件。 对于受限的 `<input>`,渲染出来的 HTML 元素始终保持 `value` 属性的值。例如:
@@ -38,7 +42,7 @@ next: working-with-the-browser-zh-CN.html
return <input type="text" value="Hello!" />;
}
```
上面的代码将渲染出一个值为 `Hello!` 的 input 元素。用户在渲染出来的元素里输入任何值都不起作用,因为 React 已经赋值为 `Hello!`。如果想响应更新用户输入的值,就得使用 `onChange` 事件:
```javascript
@@ -64,7 +68,11 @@ next: working-with-the-browser-zh-CN.html
上面的代码接受用户输入,并截取前 140 个字符。
### 复选框与单选按钮的潜在问题
当心在力图标准化复选框与单选按钮的变换处理中React使用`click` 事件代替 `change` 事件。在大多数情况下它们表现的如同预期,除了在`change` handler中调用`preventDefault``preventDefault` 阻止了浏览器视觉上更新输入,即使`checked`被触发。变通的方式是要么移除`preventDefault`的调用,要么把`checked` 的触发放在一个`setTimeout`里。
## 不受限组件
没有设置 `value`(或者设为 `null`) 的 `<input>` 组件是一个*不受限*组件。对于不受限的 `<input>` 组件,渲染出来的元素直接反应用户输入。例如:
@@ -77,6 +85,8 @@ next: working-with-the-browser-zh-CN.html
上面的代码将渲染出一个空值的输入框,用户输入将立即反应到元素上。和受限元素一样,使用 `onChange` 事件可以监听值的变化。
### 默认值
如果想给组件设置一个非空的初始值,可以使用 `defaultValue` 属性。例如:
```javascript
@@ -85,40 +95,27 @@ next: working-with-the-browser-zh-CN.html
}
```
上面的代码渲染出来的元素和**受限组件**一样有一个初始值,但这个值用户可以改变并会反应到界面上
这个例子会像上面的**Controlled Components** 例子一样运行
同样 类型为 `radio``checkbox``<input>` 支持 `defaultChecked` 属性, `<select>` 支持 `defaultValue` 属性。
同样 `<input>` 支持 `defaultChecked` `<select>` 支持 `defaultValue`.
```javascript
render: function() {
return (
<div>
<input type="radio" name="opt" defaultChecked /> Option 1
<input type="radio" name="opt" /> Option 2
<select defaultValue="C">
<option value="A">Apple</option>
<option value="B">Banana</option>
<option value="C">Cranberry</option>
</select>
</div>
);
}
```
> 注意:
>
> `defaultValue` 和 `defaultChecked` props 只能在内部渲染时被使用。 如果你需要在随后的渲染更新值, 你需要使用 [受限组件](#受限组件).
## 高级主题
### 为什么使用受限组件?
在 React 中使用诸如 `<input>` 的表单组件时,遇到了一个在传统 HTML 中没有的挑战。
比如下面的代码:
在 React 中使用诸如 `<input>` 的表单组件时,遇到了一个在传统 HTML 中没有的挑战。比如下面的代码:
```html
<input type="text" name="title" value="Untitled" />
```
在 HTML 中将渲染初始值`Untitled` 的输入框。用户改变输入框的值时,节点的 `value` 属性*property*将随之变化,但是 `node.getAttribute('value')` 还是会返回初始设置的值 `Untitled`.
在 HTML 中将渲染 *初始值* `Untitled` 的输入框。用户改变输入框的值时,节点的 `value` 属性( *property*)将随之变化,但是 `node.getAttribute('value')` 还是会返回初始设置的值 `Untitled`.
与 HTML 不同React 组件必须在任何时间点描绘视图的状态,而不仅仅是在初始化时。比如在 React 中:
@@ -128,7 +125,7 @@ next: working-with-the-browser-zh-CN.html
}
```
该方法在任何时间点渲染组件以后,输入框的值就应该*始终*`Untitled`
该方法在任何时间点渲染组件以后,输入框的值就应该 *始终* `Untitled`
### 为什么 `<textarea>` 使用 `value` 属性?
@@ -139,17 +136,17 @@ next: working-with-the-browser-zh-CN.html
<!-- 反例:在 React 中不要这样使用! -->
<textarea name="description">This is the description.</textarea>
```
对 HTML 而言让开发者设置多行的值很容易。但是React 是 JavaScript没有字符限制可以使用 `\n` 实现换行。简言之React 已经有 `value``defaultValue` 属性,`</textarea>` 组件的子节点扮演什么角色就有点模棱两可了。基于此, 设置 `<textarea>` 值时不应该使用子节点:
```javascript
<textarea name="description" value="This is a description." />
```
如果*非要**使用子节点,效果和使用 `defaultValue` 一样。
如果 *非要* 使用子节点,效果和使用 `defaultValue` 一样。
### 为什么 `<select>` 使用 `value` 属性
### 为什么 `<select>` 使用 `value` 属性
HTML 中 `<select>` 通常使用 `<option>``selected` 属性设置选中状态React 为了更方面的控制组件,采用以下方式代替:

View File

@@ -0,0 +1,109 @@
---
id: working-with-the-browser-it-IT
title: Lavorare con il Browser
permalink: working-with-the-browser-it-IT.html
prev: forms-it-IT.html
next: more-about-refs-it-IT.html
---
React offre potenti astrazioni che ti liberano in molti casi dal compito di manipolare direttamente il DOM, ma a volte potresti avere bisogno di accedere alle API sottostanti, ad esempio per lavorare con una libreria di terze parti o altro codice preesistente.
## Il DOM Virtuale
React è così veloce perché non interagisce direttamente con il DOM. React gestisce una rappresentazione veloce del DOM in memoria. I metodi `render()` restituiscono una *descrizione* del DOM, e React può confrontare questa descrizione con la rappresentazione in memoria per calcolare la maniera più veloce di aggiornare il browser.
In aggiunta, React implementa un intero sistema di eventi sintetici che fa in modo che tutti gli oggetti evento siano conformi alle specifiche W3C nonostante le incompatibilità dei browser, e ciascun evento si propaga in maniera consistente ed efficiente in ogni browser. Puoi anche utilizzare alcuni eventi HTML5 in IE8!
Nella maggior parte dei casi è sufficiente rimanere nel mondo del "browser fittizio" di React poiché più efficiente e facile da concepire. Tuttavia, a volte potresti aver bisogno di accedere alle API sottostanti, ad esempio per lavorare con una libreria di terze parti come un plugin jQuery. React fornisce convenienti vie di fuga perché tu possa utilizzare direttamente le API DOM sottostanti.
## I Ref e findDOMNode()
Per interagire con il browser, avrai bisogno di un riferimento a un nodo DOM. Puoi assegnare un attributo `ref` a ciascun elemento, ciò ti permette di fare riferimento all'**istanza di supporto** del componente. Questo è utile se devi invocare funzioni imperative sul componente, oppure desideri accedere ai nodi DOM sottostanti. Per saperne di piu sui ref, incluso la maniera di usarli con efficacia, leggi la nostra documentazione [riferimenti a componenti](/react/docs/more-about-refs-it-IT.html).
## Ciclo di Vita del Componente
I componenti hanno tree fasi principali del ciclo di vita:
* **Montaggio:** Un componente sta venendo inserito nel DOM.
* **Aggiornamento:** Viene effettuato nuovamente il rendering del componente per determinare se il DOM vada aggiornato.
* **Smontaggio:** Un componente sta venendo rimosso dal DOM.
React offre metodi del ciclo di vita che puoi specificare per inserirti in questo processo. Offriamo dei metodi il cui nome inizia per **will**, chiamati immediatamente prima che qualcosa accada, o per **did** che sono chiamati immediatamente dopo che qualcosa è accaduto.
### Montaggio
* `getInitialState(): object` è invocato prima che un componente viene montato. Componenti dotati di stato dovrebbero implementare questo metodo e restituire lo stato iniziale.
* `componentWillMount()` è invocato immediatamente prima che si effettui il montaggio.
* `componentDidMount()` è invocato immediatamente dopo che il montaggio è avvenuto. L'inizializzazione che richiede l'esistenza di nodi DOM dovrebbe avvenire in questo metodo.
### Aggiornamento
* `componentWillReceiveProps(object nextProps)` è invocato quando un componente montato riceve nuove proprietà. Questo metodo dovrebbe essere utilizzato per confrontare `this.props` e `nextProps` per effettuare transizioni di stato utilizzando `this.setState()`.
* `shouldComponentUpdate(object nextProps, object nextState): boolean` è invocato quando un componente decide se i cambiamenti debbano risultare in un aggiornamento del DOM. Implementa questo metodo come un'ottimizzazione per confrontare `this.props` con `nextProps` e `this.state` con `nextState`, e restituisci `false` se React debba rimandare l'aggiornamento.
* `componentWillUpdate(object nextProps, object nextState)` è invocato immediatamente prima che l'aggiornamento avvenga. Non puoi chiamare `this.setState()` al suo interno.
* `componentDidUpdate(object prevProps, object prevState)` è invocato immediatamente dopo che l'aggiornamento è avvenuto.
### Smontaggio
* `componentWillUnmount()` è invocato immediatamente prima che un componente venga smontato e distrutto. Puoi effettuare operazioni di pulizia al suo interno.
### Metodi Montati
Componenti compositi _montati_ supportano anche i seguenti metodi:
* `findDOMNode(): DOMElement` può essere invocato su ciascun componente montato per ottenere un riferimento al suo nodo DOM.
* `forceUpdate()` può essere invocato su ciascun componente montato quando si è certi che un aspetto interno del componente è cambiato senza usare `this.setState()`.
## Supporto per i Browser e Polyfill
A Facebook supportiamo vecchi browser, incluso IE8. Abbiamo impiegato per un lungo tempo i polyfill per consentirci di scrivere JS con un occhio al futuro. Ciò significa che non abbiamo una quantità di hack sparsi nel nostro codice e possiamo tuttavia aspettarci che il nostro codice "semplicemente funzioni". Ad esempio, anziché usare `+new Date()`, possiamo scrivere `Date.now()`. Dal momento che la versione open source di React è la stessa che usiamo internamente, vi abbiamo applicato la stessa filosofia di scrivere JS guardando avanti.
In aggiunta a questa filosofia, abbiamo anche deciso, in qualità di autori di una libreria JS, non dovremmo fornire i polyfill assieme alla nostra libreria. Se ciascuna libreria facesse ciò, con buona probabilità invieresti lo stesso polyfill diverse volte, cosa che potrebbe risultare in una rilevante quantità di codice inutilizzato. Se il tuo prodotto deve supportare vecchi browser, con buona probabilità stai già usando qualcosa come [es5-shim](https://github.com/es-shims/es5-shim).
### Polyfill Richiesti per Supportare Vecchi Browser
`es5-shim.js` tratto da [es5-shim di kriskowal](https://github.com/es-shims/es5-shim) fornisce le seguenti API indispensabili a React:
* `Array.isArray`
* `Array.prototype.every`
* `Array.prototype.forEach`
* `Array.prototype.indexOf`
* `Array.prototype.map`
* `Date.now`
* `Function.prototype.bind`
* `Object.keys`
* `String.prototype.split`
* `String.prototype.trim`
`es5-sham.js`, anch'esso tratto da [es5-shim di kriskowal](https://github.com/es-shims/es5-shim), provides the following that React needs:
* `Object.create`
* `Object.freeze`
La build non minificata di React richiede le seguenti API tratte da [console-polyfill di paulmillr](https://github.com/paulmillr/console-polyfill).
* `console.*`
Quando si usano elementi HTML5 in IE8 incluso `<section>`, `<article>`, `<nav>`, `<header>` e `<footer>`, è inoltre necessario includere [html5shiv](https://github.com/aFarkas/html5shiv) o uno script equivalente.
### Problemi Cross-browser
Nonostante React sia molto buono ad astrarre le differenze tra browser, alcuni browser sono limitati o presentano comportamenti scorretti per i quali non abbiamo potuto trovare un rimedio.
#### Evento onScroll su IE8
Su IE8 l'evento `onScroll` non viene propagato, e IE8 non possiede una API per definire gestori di eventi nella fase di cattura dell'evento, con il risultato che React non ha alcun modo di reagire a questi eventi.
Al momento i gestori di questo evento vengono ignorati su IE8.
Leggi la issue [onScroll doesn't work in IE8](https://github.com/facebook/react/issues/631) su GitHub per maggiori informazioni.

View File

@@ -18,7 +18,7 @@ ReactはDOMと直接対話を行わないため、とても速いです。React
## 参照とfindDOMNode()
ブラウザと相互に影響するために、DOMードへの参照が必要になるでしょう。ReactはコンポーネントのDOMードへの参照を得ることができる `React.findDOMNode(component)` 関数を持っています。
ブラウザと相互に影響するために、DOMードへの参照が必要になるでしょう。ReactはコンポーネントのDOMードへの参照を得ることができる `ReactDOM.findDOMNode(component)` 関数を持っています。
> 注意:
> `findDOMNode()` はマウントされたコンポーネントの上でのみ動きますこれは、DOMに配置されたコンポーネントという意味です。まだマウントされていないまだ作成されていないコンポーネントの上で `render()` の `findDOMNode()` を呼ぶようなものです)コンポーネントの上でこれを呼ぼうとした場合、例外がスローされます。
@@ -29,10 +29,10 @@ Reactのコンポーネントへの参照を得るためには、現在のReact
var MyComponent = React.createClass({
handleClick: function() {
// 生のDOMのAPIを使ってテキスト入力に明確にフォーカスします。
React.findDOMNode(this.refs.myTextInput).focus();
ReactDOM.findDOMNode(this.refs.myTextInput).focus();
},
render: function() {
// この参照属性はコンポーネントがマウントされた時に、
// この参照属性はコンポーネントがマウントされた時に、
// this.refs のコンポーネントへの参照を追加します。
return (
<div>
@@ -47,7 +47,7 @@ var MyComponent = React.createClass({
}
});
React.render(
ReactDOM.render(
<MyComponent />,
document.getElementById('example')
);

View File

@@ -20,7 +20,7 @@ React는 DOM을 직접 다루지 않기 때문에 굉장히 빠릅니다. React
## Refs와 findDOMNode()
브라우저와 상호 작용하려면 DOM 노드에 대한 참조가 필요합니다. React는 `React.findDOMNode(component)` 함수를 갖고 있으며, 이를 통해서 컴포넌트의 DOM 노드의 참조를 얻을 수 있습니다.
브라우저와 상호 작용하려면 DOM 노드에 대한 참조가 필요합니다. React는 `ReactDOM.findDOMNode(component)` 함수를 갖고 있으며, 이를 통해서 컴포넌트의 DOM 노드의 참조를 얻을 수 있습니다.
> 주의:
>
@@ -32,7 +32,7 @@ React 컴포넌트에 대한 참조는 현재의 React 컴포넌트를 위해 `t
var MyComponent = React.createClass({
handleClick: function() {
// raw DOM API를 사용해 명시적으로 텍스트 인풋을 포커스 합니다.
React.findDOMNode(this.refs.myTextInput).focus();
ReactDOM.findDOMNode(this.refs.myTextInput).focus();
},
render: function() {
// ref 어트리뷰트는 컴포넌트가 마운트되면 그에 대한 참조를 this.refs에 추가합니다.
@@ -49,7 +49,7 @@ var MyComponent = React.createClass({
}
});
React.render(
ReactDOM.render(
<MyComponent />,
document.getElementById('example')
);
@@ -137,7 +137,7 @@ _마운트된_ 합성 컴포넌트들은 다음과 같은 메소드를 지원합
### 크로스 브라우징 이슈
React가 브라우저별 차이점을 썩 잘 추상화하긴 했지만 일부는 한정적이거나 우리가 발견하지 못한 이상한(quirky) 동작을 보여주기도 합니다.
React가 브라우저별 차이점을 썩 잘 추상화하긴 했지만 일부는 한정적이거나 우리가 발견하지 못한 이상한(quirky) 동작을 보여주기도 합니다.
#### IE8에서의 onScroll 이벤트

View File

@@ -8,59 +8,17 @@ next: more-about-refs.html
React provides powerful abstractions that free you from touching the DOM directly in most cases, but sometimes you simply need to access the underlying API, perhaps to work with a third-party library or existing code.
## The Virtual DOM
React is so fast because it never talks to the DOM directly. React maintains a fast in-memory representation of the DOM. `render()` methods return a *description* of the DOM, and React can diff this description with the in-memory representation to compute the fastest way to update the browser.
React is very fast because it never talks to the DOM directly. React maintains a fast in-memory representation of the DOM. `render()` methods actually return a *description* of the DOM, and React can compare this description with the in-memory representation to compute the fastest way to update the browser.
Additionally, React implements a full synthetic event system such that all event objects are guaranteed to conform to the W3C spec despite browser quirks, and everything bubbles consistently and efficiently across browsers. You can even use some HTML5 events in IE8!
Most of the time you should stay within React's "faked browser" world since it's more performant and easier to reason about. However, sometimes you simply need to access the underlying API, perhaps to work with a third-party library like a jQuery plugin. React provides escape hatches for you to use the underlying DOM API directly.
## Refs and findDOMNode()
To interact with the browser, you'll need a reference to a DOM node. React has a `React.findDOMNode(component)` function which you can call to get a reference to the component's DOM node.
> Note:
>
> `findDOMNode()` only works on mounted components (that is, components that have been placed in the DOM). If you try to call this on a component that has not been mounted yet (like calling `findDOMNode()` in `render()` on a component that has yet to be created) an exception will be thrown.
In order to get a reference to a React component, you can either use `this` to get the current React component, or you can use refs to refer to a component you own. They work like this:
```javascript
var MyComponent = React.createClass({
handleClick: function() {
// Explicitly focus the text input using the raw DOM API.
React.findDOMNode(this.refs.myTextInput).focus();
},
render: function() {
// The ref attribute adds a reference to the component to
// this.refs when the component is mounted.
return (
<div>
<input type="text" ref="myTextInput" />
<input
type="button"
value="Focus the text input"
onClick={this.handleClick}
/>
</div>
);
}
});
React.render(
<MyComponent />,
document.getElementById('example')
);
```
## More About Refs
To learn more about refs, including ways to use them effectively, see our [more about refs](/react/docs/more-about-refs.html) documentation.
To interact with the browser, you'll need a reference to a DOM node. You can attach a `ref` to any element, which allows you to reference the **backing instance** of the component. This is useful if you need to invoke imperative functions on the component, or want to access the underlying DOM nodes. To learn more about refs, including ways to use them effectively, see our [refs to components](/react/docs/more-about-refs.html) documentation.
## Component Lifecycle
@@ -72,14 +30,12 @@ Components have three main parts of their lifecycle:
React provides lifecycle methods that you can specify to hook into this process. We provide **will** methods, which are called right before something happens, and **did** methods which are called right after something happens.
### Mounting
* `getInitialState(): object` is invoked before a component is mounted. Stateful components should implement this and return the initial state data.
* `componentWillMount()` is invoked immediately before mounting occurs.
* `componentDidMount()` is invoked immediately after mounting occurs. Initialization that requires DOM nodes should go here.
### Updating
* `componentWillReceiveProps(object nextProps)` is invoked when a mounted component receives new props. This method should be used to compare `this.props` and `nextProps` to perform state transitions using `this.setState()`.
@@ -87,19 +43,15 @@ React provides lifecycle methods that you can specify to hook into this process.
* `componentWillUpdate(object nextProps, object nextState)` is invoked immediately before updating occurs. You cannot call `this.setState()` here.
* `componentDidUpdate(object prevProps, object prevState)` is invoked immediately after updating occurs.
### Unmounting
* `componentWillUnmount()` is invoked immediately before a component is unmounted and destroyed. Cleanup should go here.
### Mounted Methods
_Mounted_ composite components also support the following methods:
* `findDOMNode(): DOMElement` can be invoked on any mounted component in order to obtain a reference to its rendered DOM node.
* `forceUpdate()` can be invoked on any mounted component when you know that some deeper aspect of the component's state has changed without using `this.setState()`.
_Mounted_ composite components also support the following method:
* `component.forceUpdate()` can be invoked on any mounted component when you know that some deeper aspect of the component's state has changed without using `this.setState()`.
## Browser Support and Polyfills
@@ -107,7 +59,6 @@ At Facebook, we support older browsers, including IE8. We've had polyfills in pl
In addition to that philosophy, we've also taken the stance that we, as authors of a JS library, should not be shipping polyfills as a part of our library. If every library did this, there's a good chance you'd be sending down the same polyfill multiple times, which could be a sizable chunk of dead code. If your product needs to support older browsers, chances are you're already using something like [es5-shim](https://github.com/es-shims/es5-shim).
### Polyfills Needed to Support Older Browsers
`es5-shim.js` from [kriskowal's es5-shim](https://github.com/es-shims/es5-shim) provides the following that React needs:
@@ -134,12 +85,10 @@ The unminified build of React needs the following from [paulmillr's console-poly
When using HTML5 elements in IE8 including `<section>`, `<article>`, `<nav>`, `<header>`, and `<footer>`, it's also necessary to include [html5shiv](https://github.com/aFarkas/html5shiv) or a similar script.
### Cross-browser Issues
Although React is pretty good at abstracting browser differences, some browsers are limited or present quirky behaviors that we couldn't find a workaround for.
#### onScroll event on IE8
On IE8 the `onScroll` event doesn't bubble and IE8 doesn't have an API to define handlers to the capturing phase of an event, meaning there is no way for React to listen to these events.

View File

@@ -9,7 +9,7 @@ next: more-about-refs-zh-CN.html
React提供了强大的抽象机制使你在大多数情况下免于直接接触DOM但有时你仅仅只需要访问底层API也许是为了与第三方库或者已有的代码协作。
## 虚拟DOM
## 虚拟DOM
React如此快速是因为它从不直接操作DOM。React维持了一个快速的内存中的DOM表示。`render()` 方法返回一个DOM的*描述*然后React能根据内存中的描述diff此描述来计算出最快速的方法更新浏览器。
@@ -20,7 +20,7 @@ React如此快速是因为它从不直接操作DOM。React维持了一个快速
## Refs 和 findDOMNode()
为了与浏览器互动你需要一个指向DOM node的引用。React有一个函数`React.findDOMNode(component)` 你能调用以得到一个指向指向组件的DOM node的引用。
为了与浏览器互动你需要一个指向DOM node的引用。React有一个函数`ReactDOM.findDOMNode(component)` 你能调用以得到一个指向指向组件的DOM node的引用。
> 注意:
>
@@ -32,7 +32,7 @@ React如此快速是因为它从不直接操作DOM。React维持了一个快速
var MyComponent = React.createClass({
handleClick: function() {
// 明确的强制text input使用原生DOM API。
React.findDOMNode(this.refs.myTextInput).focus();
ReactDOM.findDOMNode(this.refs.myTextInput).focus();
},
render: function() {
// 当组件被挂载时
@@ -50,7 +50,7 @@ var MyComponent = React.createClass({
}
});
React.render(
ReactDOM.render(
<MyComponent />,
document.getElementById('example')
);
@@ -76,14 +76,14 @@ React提供生命周期方法以便你可以指定钩挂到这个过程上。
### 挂载
* `getInitialState(): object` 在组件挂载前被调用. 有状态组件(Stateful components) 应该实现此函数并返回初始state的数据。
* `componentWillMount()` 在挂载发生前被立即调用。
* `componentDidMount()` 在挂载发生后被立即调用。 需要DOM node的初始化应该放在这里。
* `componentWillMount()` 在挂载发生前被立即调用。
* `componentDidMount()` 在挂载发生后被立即调用。 需要DOM node的初始化应该放在这里。
### 更新
* `componentWillReceiveProps(object nextProps)` 当挂载的组件接收到新的props时被调用。此方法应该被用于比较`this.props``nextProps`以用于使用`this.setState()`执行状态转换。
* `shouldComponentUpdate(object nextProps, object nextState): boolean` 当组件决定任何改变是否要更新到DOM时被调用。作为一个优化实现比较`this.props``nextProps``this.state``nextState` 如果React应该跳过更新返回`false`
* `shouldComponentUpdate(object nextProps, object nextState): boolean` 当组件决定任何改变是否要更新到DOM时被调用。作为一个优化实现比较`this.props``nextProps``this.state``nextState` 如果React应该跳过更新返回`false`
* `componentWillUpdate(object nextProps, object nextState)` 在更新发生前被立即调用。你不能在此调用`this.setState()`
* `componentDidUpdate(object prevProps, object prevState)` 在更新发生后被立即调用。
@@ -108,7 +108,7 @@ _Mounted_ 复合组件同样支持以下方法:
除了这种哲学外我们也采用了这样的立场我们作为一个JS库的作者不应该把polyfills作为我们库的一部分。如果所有的库这样做就有很大的机会发送同样的polyfill多次这可能是一个相当大的无用代码。如果你的产品需要支援老的浏览器你很有可能已经在使用某些东西比如[es5-shim](https://github.com/es-shims/es5-shim)。
### 需要用来支持旧浏览器的Polyfills
### 需要用来支持旧浏览器的Polyfills
来自 [kriskowal's es5-shim](https://github.com/es-shims/es5-shim)的`es5-shim.js` 提供了如下React需要的东西
@@ -135,7 +135,7 @@ _Mounted_ 复合组件同样支持以下方法:
当在IE8里使用HTML5元素包括`<section>`, `<article>`, `<nav>`, `<header>`, 和 `<footer>`, 同样必须包含[html5shiv](https://github.com/aFarkas/html5shiv) 或者类似的脚本。
### 跨浏览器问题
### 跨浏览器问题
尽管React在抽象浏览器不同时做的相当好但一些浏览器被限制或者表现出怪异的行为我们没能找到变通的方案解决。

View File

@@ -0,0 +1,174 @@
---
id: more-about-refs
title: Refs 的更多信息
permalink: more-about-refs-zh-CN.html
prev: working-with-the-browser-zh-CN.html
next: tooling-integration-zh-CN.html
---
在从render方法返回你的UI结构之前你可能想向从`render()` 返回的组件的实例“伸手”并调用其上的方法。通常做类似这样的事情没必要在你的引用中制造数据流因为Reactive的数据量确保最近的`props` 被发送到从 `render()` 返回的每个孩子中。然而,有些情况,这样做还是必须的或者有帮助的。
考虑一下情形,元素`<input />` (他存在于你的子层级中),当你更新它的值为一个空的字符串`''` 的时候,你告诉它获得焦点。
```javascript
var App = React.createClass({
getInitialState: function() {
return {userInput: ''};
},
handleChange: function(e) {
this.setState({userInput: e.target.value});
},
clearAndFocusInput: function() {
this.setState({userInput: ''}); //清空输入
// 现在我们希望获取焦点<input />!
},
render: function() {
return (
<div>
<div onClick={this.clearAndFocusInput}>
Click to Focus and Reset
</div>
<input
value={this.state.userInput}
onChange={this.handleChange}
/>
</div>
);
}
});
```
在这个例子中,注意我们是如何想要“告诉” input 一些事情的- 一些不能从它的props得到的东西。在这种情形下我们想要“告诉”它它现在也要改获取焦点了。然而这里有些挑战。从`render()` 中返回的不是你实际组件的“孩子”组件,相反他是这些孩子在特定的时刻的一个*描述* - 一个快照。
> 注意:
>
>记着,从`render()` 中返回的不是你的*实际*渲染地孩子实例。从`render()` 中返回的仅仅是在你的组件的子层次结构中的这些孩子实例一个特定时刻的*描述*。
这意味着你绝不该“拿”从`render()` 中返回的东西去做什么事情并期望有什么意义。
```javascript
// 反模式:不能工作.
render: function() {
var myInput = <input />; // 我打算在这个上调用这个方法
this.rememberThisInput = myInput; // input在未来的某个时间点上YAY!
return (
<div>
<div>...</div>
{myInput}
</div>
);
}
```
在这个例子中,`<input />` 仅仅是 `<input />` 的一个*描述*。这个描述不能用来为`<input />`创建一个*真实的* **背后的实例**
那么对 input 的*真实的* 背后的实例,该怎么说呢?
## ref 字符串属性
React 假设你可以向任何的从`render()` 中返回的组件附加一个特别的属性。这个特殊的属性允许你引用任何的从`render()` 返回的东西对于有的**背后的实例**。而且保证在任何时间点都是合适的实例。
简单的说就是:
1. 给任何从`render()` 中返回的东西赋一个`ref` 的属性,如下所示:
```html
<input ref="myInput" />
```
2. 在其他的代码中(通常是事件处理代码中),通过 `this.refs` 来访问 **背后的实例** 如下所示:
```javascript
this.refs.myInput
```
通过调用`this.refs.myInput` 你可以直接方法这个组建的DOM。
## ref 回调属性
`ref` 属性可以用一个回调函数来替换一个名字。当这个组件装载好之后立即执行。被引用的组件被作为一个参数传入,这个回调函数可能立即使用这个组件,或保存这个引用,将来再用(或者两者都做)。
使用ES6的箭头函数为从`render` 中返回的东西添加一个`ref` 属性非常简单:
```html
render: function() {
return <TextInput ref={(c) => this._input = c} />;
},
componentDidMount: function() {
this._input.focus();
},
```
```html
render: function() {
return (
<TextInput
ref={function(input) {
if (input != null) {
input.focus();
}
}} />
);
},
```
注意当引用的组件被卸载以及无论何时这个引用改变之后,旧的引用将会被用`null` 作为一个参数来调用。这避免了当实例被存储的情形下- 像第一个例子那样 - 引起的内存泄漏。注意像这个例子中这样用inline 函数表达式写引用的时候每次有更新的时候Reac看到的都是不同的函数对象在引用被组件的实例调用之前引用被用`null` 调用。
## 完整的例子
```javascript
var App = React.createClass({
getInitialState: function() {
return {userInput: ''};
},
handleChange: function(e) {
this.setState({userInput: e.target.value});
},
clearAndFocusInput: function() {
// 清空input
this.setState({userInput: ''}, function() {
// 当这个组件被再次渲染之后,这个代码执行
this.refs.theInput.focus(); //获取焦点了!
});
},
render: function() {
return (
<div>
<div onClick={this.clearAndFocusInput}>
Click to Focus and Reset
</div>
<input
ref="theInput"
value={this.state.userInput}
onChange={this.handleChange}
/>
</div>
);
}
});
```
在这个例子中我们的render函数返回了`<input />` 实例的一个描述。但是真的实例通过`this.refs.theInput` 访问。只要`ref="theInput"` 从`render` 中返回了, `this.refs.theInput` 就可以访问合适的实例。这个事件对于高级的非DOM)的组件,例如`<Typeahead ref="myTypeahead" />` 也适用的。
## 总结
在不方便通过Reactive的 `props` 和`state` 流的方式传递信息的时候Refs是给一个特殊的子实例发送消息的重要的方法。然而他们不应该成为你的应用程序的到哪里去的数据流的抽象。对于那些本质上来说非交互的情形来说默认的应该使用Reactive数据流而少用`ref` 。
### 优点:
- 在你的组件类中你可以定义任意的公开方法例如在一个Typeahead定义一个reset方法然后通过refs来调用这些方法像这样`this.refs.myTypeahead.reset()`)。
- 执行 DOM操作总是要求诸如`<input />` 这样的一个“原生”组件,并通过`this.refs.myInput` 来访问她的低层的MOD 节点。Refs是可以做成这个事的唯一的实践可行的方法。
- Refs自动管理如果孩子被销毁了它的ref也被销毁。在这里不用担心内存除非你做了一些疯狂的事情来自己保持一个引用
### 小心:
- *绝对不要* 在组件的render方法内部- 获 当任何组件的render方法还在调用栈中执行的时候访问refs 。
- 如果你想要保护Google 闭包编译器崩溃的内力,确保绝不作为访问一个被特别的设置为一个字符串的属性。这就意味着,如果你用`ref="myRefString"` 来定义你的ref的话你必须使用`this.refs['myRefsString']` 来访问。
- 如果你不是用React做服务器编程的在你的程序中你首先的倾向是用refs来“让事情发生“。如果这是正是你的情况的话花点时间仔细的想想`state` 在这个组件的结构层次中应在在哪里使用。通常,正确的"拥有" 状态的地方是结构层次的高层。把状态放在那些地方通常可以消除使用`ref` 来”让事情发生” 的渴望 - 相反的,数据流通常能完成你的目标。

View File

@@ -0,0 +1,141 @@
---
id: more-about-refs-it-IT
title: Riferimenti ai Componenti
permalink: more-about-refs-it-IT.html
prev: working-with-the-browser-it-IT.html
next: tooling-integration-it-IT.html
---
Dopo aver costruito il tuo componente, potresti trovarti nella situazione di volere invocare dei metodi sulle istanze di componenti restituite da `render()`. Nella maggior parte dei casi, questo non è necessario poiché il flusso di dati reattivo assicura sempre che le proprietà più recenti siano assegnate a ciascun figlio prodotto da `render()`. Tuttavia, esistono dei casi in cui potrebbe essere necessario o desiderabile, quindi React fornisce una via d'uscita conosciuta come `refs`. Queste `refs` (riferimenti) sono particolarmente utili quando vuoi: trovare il markup DOM prodotto da un componente (ad esempio, per posizionarlo in modo assoluto), usare componenti React in una più ampia applicazione non-React, oppure effettuare la transizione del tuo codice a React.
Vediamo come ottenere un ref, e quindi passiamo ad un esempio completo.
## Il ref restituito da ReactDOM.render
Da non confondersi con il metodo `render()` che definisci sul tuo componente (il quale restituisce un elemento DOM virtuale), [ReactDOM.render()](/react/docs/top-level-api-it-IT.html#reactdom.render) restituisce un riferimento all'**istanza di supporto** del tuo componente (o `null` per i [componenti privi di stato](/react/docs/reusable-components.html#stateless-functions)).
```js
var myComponent = ReactDOM.render(<MyComponent />, myContainer);
```
Tieni a mente, tuttavia, che JSX non restituisce un'istanza di un componente! È solo un **ReactElement**: una rappresentazione leggera che istruisce React su come il componente montato debba apparire.
```js
var myComponentElement = <MyComponent />; // Questo è un semplice ReactElement.
// Qui va del codice...
var myComponentInstance = ReactDOM.render(myComponentElement, myContainer);
myComponentInstance.doSomething();
```
> Nota:
>
> Questo deve essere usato soltanto al livello più alto. All'interno dei componenti, lascia che i tuoi `props` e `state` gestiscano la comunicazione con i componenti figli, oppure utilizza uno degli altri metodi per ottenere un ref (attributo stringa o callback).
## L'Attributo ref Come Callback
React supporta un attributo speciale che puoi assegnare a qualsiasi componente. L'attributo `ref` può essere una funzione callback, che sarà eseguita immediatamente dopo che il componente viene montato. Il componente referenziato sarà passato come parametro, e la funzione callback può utilizzare il componente immediatamente, oppure conservarne un riferimento per un uso successivo, o entrambe.
È semplice come aggiungere un attributo `ref` a qualsiasi cosa restituita da `render` usando una funzione freccia di ES6:
```js
render: function() {
return (
<TextInput
ref={function(input) {
if (input != null) {
input.focus();
}
}} />
);
},
```
oppure usando una funzione freccia ES6:
```js
render: function() {
return <TextInput ref={(c) => this._input = c} />;
},
componentDidMount: function() {
this._input.focus();
},
```
Nota che quando il componente referenziato viene smontato e quando il valore di ref cambia, ref sarà chiamata con `null` come argomento. Ciò impedisce i memory leak nel caso in cui l'istanza venga conservata, come nel primo esempio. Nota che quando assegni il valore di ref a un'espressione di funzione in linea come negli esempi precedenti, React vede un oggetto funzione diverso ogni volta e pertanto in occasione di ciascun aggiornamento, ref verrà chiamata con `null` immediatamente prima di essere chiamata con l'istanza del componente.
Puoi accedere al nodo DOM del componente direttamente chiamando `ReactDOM.findDOMNode(argomentoDellaTuaCallback)`.
## L'Attributo ref Come Stringa
React supporta anche l'uso di una stringa (anziché una callback) come proprietà ref su qualsiasi componente, sebbene allo stato attuale questo approccio sia quasi esclusivamente superato.
1. Assegna un attributo `ref` a qualsiasi cosa restituita da `render` come:
```html
<input ref="myInput" />
```
2. Altrove nel codice (tipicamente in un gestore di eventi), accedi all'**istanza di supporto** tramite `this.refs` come segue:
```javascript
this.refs.myInput
```
Puoi accedere direttamente al nodo DOM del componente chiamando `ReactDOM.findDOMNode(this.refs.myInput)`.
## Un Esempio Completo
Per ottenere un riferimento a un componente React, puoi usare `this` per ottenere il componente React attuale, oppure usare un ref per ottenere un riferimento a un componente di tua proprietà. Il funzionamento è il seguente:
```javascript
var MyComponent = React.createClass({
handleClick: function() {
// Assegna il focus esplicitamente al campo di testo usando l'API DOM nativa.
this.myTextInput.focus();
},
render: function() {
// L'attributo ref aggiunge un riferimento al componente a this.refs quando
// il componente viene montato
return (
<div>
<input type="text" ref={(ref) => this.myTextInput = ref} />
<input
type="button"
value="Assegna il focus al campo di testo"
onClick={this.handleClick}
/>
</div>
);
}
});
ReactDOM.render(
<MyComponent />,
document.getElementById('example')
);
```
In questo esempio, otteniamo un riferimento all'**istanza di supporto** del campo di testo e vi invochiamo il metodo `focus()` quando il bottone viene cliccato.
Per componenti compositi, il riferimento si riferisce a un'istanza della classe del componente, quindi puoi invocare ogni metodo definito in tale classe. Se devi accedere al nodo DOM sottostante per il componente, puoi usare [ReactDOM.findDOMNode](/react/docs/top-level-api-it-IT.html#reactdom.finddomnode).
## Riassunto
I riferimenti `ref` sono la maniera corretta di inviare un messaggio a una precisa istanza di un figlio in una maniera che sarebbe impraticabile attraverso le normali proprietà `props` e `state` di React. Tuttavia, esse non dovrebbero essere la tua astrazione principale per far fluire i dati attraverso la tua applicazione. In modo predefinito, usa il flusso dati di React e utilizza i `ref` per casi d'uso che sono intrinsecamente non reattivi.
### Benefici:
- Puoi definire ogni metodo pubblico nelle classi dei tuoi componenti (come un metodo per reimpostare un Typeahead) e chiamare tali metodi pubblici attraverso i riferimenti (come ad esempio `this.refs.myTypeahead.reset()`).
- Effettuare misure sul DOM richiede quasi sempre l'accesso ad un componente "nativo" come `<input />` accedendo il suo nodo DOM sottostante attraverso `ReactDOM.findDOMNode(this.refs.myInput)`. I riferimenti sono uno degli unici metodi praticabili per fare ciò in maniera affidabile.
- I riferimenti sono gestiti automaticamente per te! Se un figlio è distrutto, anche il suo riferimento è distrutto. Pertanto non preoccuparti del consumo di memoria (a meno che tu non faccia qualcosa di folle per conservare un riferimento).
### Precauzioni:
- *Non accedere mai* ai riferimenti dentro il metodo render di un componente - oppure mentre il metodo render di qualsiasi componente è in esecuzione ovunque nella pila di chiamate.
- Se vuoi preservare la resilienza al Crushing del compilatore Google Closure Compiler, assicurati di non accedere mai come proprietà a ciò che è stato specificato come stringa. Ciò significa che devi accedere come `this.refs['myRefString']` se il tuo ref è stato definito come `ref="myRefString"`.
- Se non hai ancora programmato parecchie applicazioni con React, la tua prima inclinazione è solitamente di provare a utilizzare i riferimenti per "fare succedere qualcosa" nella tua applicazione. Se questo è il tuo caso, fermati un momento e pensa in maniera critica al luogo corretto nella gerarchia dei componenti in cui lo `state` debba trovarsi. Spesso ti accorgerai che il luogo corretto per "possedere" lo stato si trova a un livello più alto nella gerarchia. Posizionare lì lo stato spesso elimina ogni necessità di usare i `ref` per "fare accadere qualcosa" al contrario, il flusso dei dati solitamente otterrà lo scopo desiderato.
- I ref non possono essere assegnati a [funzioni prive di stato](/react/docs/reusable-components-it-IT.html#stateless-functions), poiché il componente non possiede un'istanza di supporto. Puoi tuttavia racchiudere un componente privo di stato in un componente composito standard e assegnare il ref al componente composito.

View File

@@ -81,7 +81,7 @@ Reactは `render()` からの出力であるコンポーネントであれば何
this.refs.myInput
```
`React.findDOMNode(this.refs.myInput)` を呼ぶことで、コンポーネントのDOMードに直接アクセスできる。
`ReactDOM.findDOMNode(this.refs.myInput)` を呼ぶことで、コンポーネントのDOMードに直接アクセスできる。
## 参照のコールバック属性
@@ -90,7 +90,7 @@ Reactは `render()` からの出力であるコンポーネントであれば何
これは、以下のように、 `render` でリターンされてきたものに `ref` 属性をアサインするのと同じくらい簡単です。
```html
<input ref={ function(component){ React.findDOMNode(component).focus();} } />
<input ref={ function(component){ ReactDOM.findDOMNode(component).focus();} } />
```
@@ -108,7 +108,7 @@ Reactは `render()` からの出力であるコンポーネントであれば何
// inputをクリアする
this.setState({userInput: ''}, function() {
// このコードはコンポーネントが再度レンダリングされた後に実行されます。
React.findDOMNode(this.refs.theInput).focus(); // どーん!フォーカスされました!
ReactDOM.findDOMNode(this.refs.theInput).focus(); // どーん!フォーカスされました!
});
},
render: function() {
@@ -137,11 +137,11 @@ Reactは `render()` からの出力であるコンポーネントであれば何
### 利益:
- コンポーネントクラス例えば、Typeaheadのリセットメソッドのようなものにパブリックなメソッドを定義できる。また、参照例えば、 `this.refs.myTypeahead.reset()` のように)を通してそれらのパブリックなメソッドを呼べる。
- DOMの計測を行うことは大体いつも `<input />` のような「ネイティブの」コンポーネントや `React.findDOMNode(this.refs.myInput)` を通した根本のDOMードにアクセスすることを必要とします。参照は、こういったことを期待通りに行う唯一の実用的な方法です。
- DOMの計測を行うことは大体いつも `<input />` のような「ネイティブの」コンポーネントや `ReactDOM.findDOMNode(this.refs.myInput)` を通した根本のDOMードにアクセスすることを必要とします。参照は、こういったことを期待通りに行う唯一の実用的な方法です。
- 参照は自動的に管理されます!もし子要素が削除されたら、その参照もまた削除されます。メモリに関しての心配は要りません(あなた自身が参照を維持するために何かおかしなことを行っていなければ)。
### 警告:
- *決して* コンポーネントのレンダリングメソッドの中の参照にアクセスしてはいけません。たとえコンポーネントのレンダリングメソッドのいずれかがコールスタックの中のどこかで動いているとしても。
- もしGoogle Closure Compilerのクラッシュからの回復を守りたいなら、文字列として指定されたプロパティとしてアクセスしてはいけないことに気をつけてください。これは、 `ref="myRefString"` として参照が定義されている場合は、 `this.refs['myRefString']` を使ってアクセスしなければいけないことを意味します。
- まだReactでプログラムを書いたことがない場合は、アプリケーションで「何かを起こす」ために参照を使おうとするでしょう。もしそのケースだった場合は、時間をかけて `state` がコンポーネントの階層のどこで保持されるべきか批評的に考えてください。多くの場合は、そのstateを「保持する」ための固有の場所が階層の高いレベルにあることがクリアになります。そのstateをその場所に配置することはよく「何かを起こす」ために `ref` を使うための願望を排除します。代わりに、データフローは普通、目標を達成します。
- まだReactでプログラムを書いたことがない場合は、アプリケーションで「何かを起こす」ために参照を使おうとするでしょう。もしそのケースだった場合は、時間をかけて `state` がコンポーネントの階層のどこで保持されるべきか批評的に考えてください。多くの場合は、そのstateを「保持する」ための固有の場所が階層の高いレベルにあることがクリアになります。そのstateをその場所に配置することはよく「何かを起こす」ために `ref` を使うための願望を排除します。代わりに、データフローは普通、目標を達成します。

View File

@@ -84,7 +84,7 @@ React는 `render()`로 출력된 컴포넌트에 추가할 수 있는 아주 특
this.refs.myInput
```
`React.findDOMNode(this.refs.myInput)`를 호출해 컴포넌트의 DOM 노드에 접근할 수 있습니다.
`this.refs.myInput`를 호출해 컴포넌트의 DOM 노드에 접근할 수 있습니다.
## ref 콜백 어트리뷰트
@@ -93,7 +93,7 @@ React는 `render()`로 출력된 컴포넌트에 추가할 수 있는 아주 특
`render`에서 반환한 모든 것에 간단하게 `ref` 어트리뷰트를 할당할 수 있습니다:
```html
<input ref={ function(component){ React.findDOMNode(component).focus();} } />
<input ref={ function(component){component.focus();} } />
```
## 예제 완성하기
@@ -110,7 +110,7 @@ React는 `render()`로 출력된 컴포넌트에 추가할 수 있는 아주 특
// input을 비워준다
this.setState({userInput: ''}, function() {
// 이 코드는 컴포넌트가 다시 렌더 된 다음 실행됩니다
React.findDOMNode(this.refs.theInput).focus(); // 짠! 포커스 됨!
this.refs.theInput.focus(); // 짠! 포커스 됨!
});
},
render: function() {
@@ -140,7 +140,7 @@ Refs는 반응적인 `props`와 `state` 스트리밍을 통해서는 불편했
### 이점:
- 컴포넌트 클래스에 public 메소드(ex. Typeahead의 reset)를 선언할 수 있으며 refs를 통해 그를 호출할 수 있습니다. (ex. `this.refs.myTypeahead.reset()`)
- DOM을 측정하기 위해서는 거의 항상 `<input />` 같은 "기본" 컴포넌트를 다루고 `React.findDOMNode(this.refs.myInput)`를 통해 그 기저의 DOM 노드에 접근해야 합니다. Refs는 이 일을 확실하게 수행하는 몇 안 되는 실용적인 방법의 하나입니다.
- DOM을 측정하기 위해서는 거의 항상 `<input />` 같은 "기본" 컴포넌트를 다루고 `this.refs.myInput`를 통해 그 기저의 DOM 노드에 접근해야 합니다. Refs는 이 일을 확실하게 수행하는 몇 안 되는 실용적인 방법의 하나입니다.
- Refs는 자동으로 관리합니다! 자식이 파괴되면, 그의 ref도 마찬가지로 파괴됩니다. 참조를 유지하기 위해 뭔가 미친 짓을 하지 않는 한, 메모리 걱정은 하지 않아도 됩니다.
### 주의:

View File

@@ -1,109 +1,45 @@
---
id: more-about-refs
title: More About Refs
title: Refs to Components
permalink: more-about-refs.html
prev: working-with-the-browser.html
next: tooling-integration.html
---
After returning the structure of your UI from the render method, you may find yourself wanting to "reach out" and invoke methods on component instances returned from `render()`. Often, doing something like this isn't necessary for making data flow through your application, because the Reactive data flow always ensures that the most recent `props` are sent to each child that is output from `render()`. However, there are a few cases where it still might be necessary or beneficial.
After building your component, you may find yourself wanting to "reach out" and invoke methods on component instances returned from `render()`. In most cases, this should be unnecessary because the reactive data flow always ensures that the most recent props are sent to each child that is output from render(). However, there are a few cases where it still might be necessary or beneficial, so React provides an escape hatch known as `refs`. These `refs` (references) are especially useful when you need to: find the DOM markup rendered by a component (for instance, to position it absolutely), use React components in a larger non-React application, or transition your existing codebase to React.
Consider the case, when you wish to tell an `<input />` element (that exists within your instances sub-hierarchy) to focus after you update its value to be the empty string, `''`.
Let's look at how to get a ref, and then dive into a complete example.
```javascript
var App = React.createClass({
getInitialState: function() {
return {userInput: ''};
},
handleChange: function(e) {
this.setState({userInput: e.target.value});
},
clearAndFocusInput: function() {
this.setState({userInput: ''}); // Clear the input
// We wish to focus the <input /> now!
},
render: function() {
return (
<div>
<div onClick={this.clearAndFocusInput}>
Click to Focus and Reset
</div>
<input
value={this.state.userInput}
onChange={this.handleChange}
/>
</div>
);
}
});
## The ref returned from ReactDOM.render
Not to be confused with the `render()` function that you define on your component (and which returns a virtual DOM element), [ReactDOM.render()](/react/docs/top-level-api.html#reactdom.render) will return a reference to your component's **backing instance** (or `null` for [stateless components](/react/docs/reusable-components.html#stateless-functions)).
```js
var myComponent = ReactDOM.render(<MyComponent />, myContainer);
```
Keep in mind, however, that the JSX doesn't return a component instance! It's just a **ReactElement**: a lightweight representation that tells React what the mounted component should look like.
Notice how, in this example, we want to "tell" the input something - something that it cannot infer from its props over time. In this case we want to "tell" it that it should now become focused. However, there are some challenges. What is returned from `render()` is not your actual composition of "child" components, but rather it is a *description* of the children at a particular instance in time - a snapshot.
```js
var myComponentElement = <MyComponent />; // This is just a ReactElement.
// Some code here...
var myComponentInstance = ReactDOM.render(myComponentElement, myContainer);
myComponentInstance.doSomething();
```
> Note:
>
> Remember, what you return from `render()` is not your *actual* rendered children instances. What you return from `render()` is merely a *description* of the children instances in your component's sub-hierarchy at a particular moment in time.
This means that you should never "hold onto" something that you return from `render()` and then expect it to be anything meaningful.
```javascript
// antipattern: This won't work.
render: function() {
var myInput = <input />; // I'm going to try to call methods on this
this.rememberThisInput = myInput; // input at some point in the future! YAY!
return (
<div>
<div>...</div>
{myInput}
</div>
);
}
```
In this example, the `<input />` is merely a *description* of an `<input />`. This description is used to create a *real* **backing instance** for the `<input />`.
So how do we talk to the *real* backing instance of the input?
## The ref String Attribute
React supports a very special property that you can attach to any component that is output from `render()`. This special property allows you to refer to the corresponding **backing instance** of anything returned from `render()`. It is always guaranteed to be the proper instance, at any point in time.
It's as simple as:
1. Assign a `ref` attribute to anything returned from `render` such as:
```html
<input ref="myInput" />
```
2. In some other code (typically event handler code), access the **backing instance** via `this.refs` as in:
```javascript
this.refs.myInput
```
You can access the component's DOM node directly by calling `React.findDOMNode(this.refs.myInput)`.
> This should only ever be used at the top level. Inside components, let your `props` and `state` handle communication with child components, or use one of the other methods of getting a ref (string attribute or callbacks).
## The ref Callback Attribute
The `ref` attribute can be a callback function instead of a name. This callback will be executed immediately after the component is mounted. The referenced component will be passed in as a parameter, and the callback function may use the component immediately, or save the reference for future use (or both).
React supports a special attribute that you can attach to any component. The `ref` attribute can be a callback function, and this callback will be executed immediately after the component is mounted. The referenced component will be passed in as a parameter, and the callback function may use the component immediately, or save the reference for future use (or both).
It's as simple as adding a `ref` attribute to anything returned from `render` by using an ES6 arrow function:
It's as simple as adding a `ref` attribute to anything returned from `render`:
```html
render: function() {
return <TextInput ref={(c) => this._input = c} />;
},
componentDidMount: function() {
this._input.focus();
},
```
or
```html
```js
render: function() {
return (
<TextInput
@@ -115,46 +51,73 @@ or
);
},
```
or using an ES6 arrow function:
Note that when the referenced component is unmounted and whenever the ref changes, the old ref will be called with `null` as an argument. This prevents memory leaks in the case that the instance is stored, as in the first example. Note that when writing refs with inline function expressions as in the examples here, React sees a different function object each time so on every update, ref will be called with `null` immediately before it's called with the component instance.
## Completing the Example
```javascript
var App = React.createClass({
getInitialState: function() {
return {userInput: ''};
},
handleChange: function(e) {
this.setState({userInput: e.target.value});
},
clearAndFocusInput: function() {
// Clear the input
this.setState({userInput: ''}, function() {
// This code executes after the component is re-rendered
React.findDOMNode(this.refs.theInput).focus(); // Boom! Focused!
});
},
render: function() {
return (
<div>
<div onClick={this.clearAndFocusInput}>
Click to Focus and Reset
</div>
<input
ref="theInput"
value={this.state.userInput}
onChange={this.handleChange}
/>
</div>
);
}
});
```js
render: function() {
return <TextInput ref={(c) => this._input = c} />;
},
componentDidMount: function() {
this._input.focus();
},
```
In this example, our render function returns a description of an `<input />` instance. But the true instance is accessed via `this.refs.theInput`. As long as a child component with `ref="theInput"` is returned from `render`, `this.refs.theInput` will access the proper instance. This even works on higher level (non-DOM) components such as `<Typeahead ref="myTypeahead" />`.
When attaching a ref to a DOM component like `<div />`, you get the DOM node back; when attaching a ref to a composite component like `<TextInput />`, you'll get the React class instance. In the latter case, you can call methods on that component if any are exposed in its class definition.
Note that when the referenced component is unmounted and whenever the ref changes, the old ref will be called with `null` as an argument. This prevents memory leaks in the case that the instance is stored, as in the first example. Also note that when writing refs with inline function expressions as in the examples here, React sees a different function object each time so on every update, ref will be called with `null` immediately before it's called with the component instance.
## The ref String Attribute
React also supports using a string (instead of a callback) as a ref prop on any component, although this approach is mostly legacy at this point.
1. Assign a `ref` attribute to anything returned from `render` such as:
```html
<input ref="myInput" />
```
2. In some other code (typically event handler code), access the **backing instance** via `this.refs` as in:
```javascript
var input = this.refs.myInput;
var inputValue = input.value;
var inputRect = input.getBoundingClientRect();
```
## A Complete Example
In order to get a reference to a React component, you can either use `this` to get the current React component, or you can use a ref to get a reference to a component you own. They work like this:
```javascript
var MyComponent = React.createClass({
handleClick: function() {
// Explicitly focus the text input using the raw DOM API.
this.myTextInput.focus();
},
render: function() {
// The ref attribute adds a reference to the component to
// this.refs when the component is mounted.
return (
<div>
<input type="text" ref={(ref) => this.myTextInput = ref} />
<input
type="button"
value="Focus the text input"
onClick={this.handleClick}
/>
</div>
);
}
});
ReactDOM.render(
<MyComponent />,
document.getElementById('example')
);
```
In this example, we get a reference to the text input **backing instance** and we call `focus()` when the button is clicked.
For composite components, the reference will refer to an instance of the component class so you can invoke any methods that are defined on that class. If you need access to the underlying DOM node for that component, you can use [ReactDOM.findDOMNode](/react/docs/top-level-api.html#reactdom.finddomnode) as an "escape hatch" but we don't recommend it since it breaks encapsulation and in almost every case there's a clearer way to structure your code within the React model.
## Summary
@@ -162,12 +125,13 @@ Refs are a great way to send a message to a particular child instance in a way t
### Benefits:
- You can define any public method on your component classes (such as a reset method on a Typeahead) and call those public methods through refs (such as `this.refs.myTypeahead.reset()`).
- Performing DOM measurements almost always requires reaching out to a "native" component such as `<input />` and accessing its underlying DOM node via `React.findDOMNode(this.refs.myInput)`. Refs are one of the only practical ways of doing this reliably.
- You can define any public method on your component classes (such as a reset method on a Typeahead) and call those public methods through refs (such as `this.refs.myTypeahead.reset()`). In most cases, it's clearer to use the built-in React data flow instead of using refs imperatively.
- Performing DOM measurements almost always requires reaching out to a "native" component such as `<input />` and accessing its underlying DOM node using a ref. Refs are one of the only practical ways of doing this reliably.
- Refs are automatically managed for you! If that child is destroyed, its ref is also destroyed for you. No worrying about memory here (unless you do something crazy to retain a reference yourself).
### Cautions:
- *Never* access refs inside of any component's render method - or while any component's render method is even running anywhere in the call stack.
- If you want to preserve Google Closure Compiler Crushing resilience, make sure to never access as a property what was specified as a string. This means you must access using `this.refs['myRefString']` if your ref was defined as `ref="myRefString"`.
- If you want to preserve Google Closure Compiler advanced-mode crushing resilience, make sure to never access as a property what was specified as a string. This means you must access using `this.refs['myRefString']` if your ref was defined as `ref="myRefString"`.
- If you have not programmed several apps with React, your first inclination is usually going to be to try to use refs to "make things happen" in your app. If this is the case, take a moment and think more critically about where `state` should be owned in the component hierarchy. Often, it becomes clear that the proper place to "own" that state is at a higher level in the hierarchy. Placing the state there often eliminates any desire to use `ref`s to "make things happen" instead, the data flow will usually accomplish your goal.
- Refs may not be attached to a [stateless function](/react/docs/reusable-components.html#stateless-functions), because the component does not have a backing instance. You can always wrap a stateless component in a standard composite component and attach a ref to the composite component.

View File

@@ -0,0 +1,174 @@
---
id: more-about-refs-zh-CN
title: 关于Refs的更多内容
permalink: more-about-refs-zh-CN.html
prev: working-with-the-browser-zh-CN.html
next: tooling-integration-zh-CN.html
---
从render方法返回你的UI结构以后你也许发现自己想“接触”并且调用从 `render()`返回的组件实例上的方法。通常这样做对于让数据流过你的应用并不是必须的因为Reactive的数据流总是确保最新的`props` 被发送到 `render()`输出的每个子级。然而,有一些情况下它仍旧是必要或者有益的。
考虑这样一种场景,当你想要告诉一个`<input />` 元素(存在于你的实例的子层级)在你更新他的值为空字符串后获得焦点。
```javascript
var App = React.createClass({
getInitialState: function() {
return {userInput: ''};
},
handleChange: function(e) {
this.setState({userInput: e.target.value});
},
clearAndFocusInput: function() {
this.setState({userInput: ''}); // Clear the input
// We wish to focus the <input /> now!
},
render: function() {
return (
<div>
<div onClick={this.clearAndFocusInput}>
Click to Focus and Reset
</div>
<input
value={this.state.userInput}
onChange={this.handleChange}
/>
</div>
);
}
});
```
注意,在这个例子中,我们想 "告诉" input 一些东西 - 那些最后它不能从他的props推断出来的东西。在这个场景中我们想 "告诉" 它,它应该转为获得焦点。然而,有一些挑战。从`render()` 返回的东西不是你实际的 "子" 组件的组合,而是一个在某刻特定实例的子组件的 *描述* - 一个快照。
> 注意:
>
> 记住,从 `render()`返回的东西不是你的 *实际的* 被渲染出的子组件实例。从 `render()` 返回的东西仅仅是一个在特定时间你的组件的子层级中的子实例的 *描述*。
这意味着你万万不要把你从`render()`返回的东西 "抓住不放" 然后期望它变成任何有意义的东西。
```javascript
// 反面模式: 这行不通.
render: function() {
var myInput = <input />; // I'm going to try to call methods on this
this.rememberThisInput = myInput; // input at some point in the future! YAY!
return (
<div>
<div>...</div>
{myInput}
</div>
);
}
```
在这个例子中,`<input />` 仅仅是一个`<input />`*描述*。 这个描述被用于为`<input />`创建一个 *真实的* **支持实例(backing instance)**
所以我们如何与input的 *真实的*支持实例对话?
## ref String 属性
React支持一种非常特殊的属性你可以附加到任何从`render()`输出的组件上。这个特殊的属性允许你引用任何从`render()`返回的东西的对应 **支持实例(backing instance)** 。它总是保证是适当的实例,在任何时点上。
就是这么简单:
1. 赋值`ref`属性为任何从`render` 返回的东西,比如:
```html
<input ref="myInput" />
```
2. 在其他一些代码中(典型的事件处理代码),通过`this.refs`访问 **支持实例(backing instance)**,如:
```javascript
this.refs.myInput
```
你可以直接通过调用`ReactDOM.findDOMNode(this.refs.myInput)` 访问组件的DOM node。
## ref 回调属性
`ref` 属性可以是一个回调函数而不是名字。这个回调函数将会在组件挂载以后立即执行。被引用的组件将被作为参数传递,并且回调函数可以立即使用组件,或者保存引用将来使用(或两者都是)。
通过使用ES6的箭头函数它像添加一个`ref`属性到任何从`render`返回的东西一样简单。
```html
render: function() {
return <TextInput ref={(c) => this._input = c} />;
},
componentDidMount: function() {
this._input.focus();
},
```
或者
```html
render: function() {
return (
<TextInput
ref={function(input) {
if (input != null) {
input.focus();
}
}} />
);
},
```
注意当被引用的组件卸载和每当ref变动旧的ref将会被以`null`做参数调用。这阻止了在实例被保存的情况下的内存泄露如第一个例子。注意当像在这里的例子使用内联函数表达式写refsReact在每次更新都看到不同的函数对象ref将会被以`null` 立即调用在它被以组件实例调用前。
## 完成的示例
```javascript
var App = React.createClass({
getInitialState: function() {
return {userInput: ''};
},
handleChange: function(e) {
this.setState({userInput: e.target.value});
},
clearAndFocusInput: function() {
// Clear the input
this.setState({userInput: ''}, function() {
// This code executes after the component is re-rendered
ReactDOM.findDOMNode(this.refs.theInput).focus(); // Boom! Focused!
});
},
render: function() {
return (
<div>
<div onClick={this.clearAndFocusInput}>
Click to Focus and Reset
</div>
<input
ref="theInput"
value={this.state.userInput}
onChange={this.handleChange}
/>
</div>
);
}
});
```
在这个例子中, 我们的render函数返回一个 `<input />` 实例的描述。但是真正的实例通过 `this.refs.theInput` 访问。只要带有`ref="theInput"`的子组件从 `render`被返回,`this.refs.theInput` 就可以访问正确的实例。这甚至在更高层(non-DOM)的组件上生效,比如`<Typeahead ref="myTypeahead" />`。
## 总结
Refs是一种很好的发送消息给特定子实例(通过流式的Reactive `props` 和 `state`来做会不方便)的方式。它们应该不论怎样不是你数据流通你的应用的首选。默认方式使用Reactive数据流并为本身不是reactive的用例保存`ref`。
### 优点:
- 你可以在你的组件类里定义任何的公开方法比如在一个Typeahead的重置方法然后通过refs调用那些公开方法比如`this.refs.myTypeahead.reset()`)。
- 实行DOM测量几乎总是需要接触到"原生" 组件比如 `<input />` 并且`ReactDOM.findDOMNode(this.refs.myInput)`通过访问它的底层DOM 节点。 Refs 是唯一一个可靠的完成这件事的实际方式。
- Refs 是为你自动管理的如果子级被销毁了它的ref也同样为你销毁了。这里不用担心内存除非你做了一些疯狂的事情来自己保持一份引用
### 注意事项:
- *绝不* 在任何组件的 render 方法中访问 refs - 或者当任何组件的render方法还在调用栈上的任何地方运行时。
- 如果你想要保留Google Closure Compiler Crushing resilience务必不要把指明为字符串的以属性来访问。这意味这你必须用`this.refs['myRefString']`访问如果你的ref被定义为`ref="myRefString"`。
- 如果你没有用React写过数个程序你的第一反应通常是打算试着用refs来在你的应用里"让事情发生"。如果是这样,花一些时间并且更精密的思考`state`应该属于组件层级的哪个位置。常常,这会变得清晰:正确的"拥有"那个属性的地方应该在层级的更高层上。把state放在那里往往消除了任何使用`ref`来 "让事情发生"的渴望 - 作为替代,数据流通常将完成你的目标。

View File

@@ -0,0 +1,74 @@
---
id: tooling-integration-it-IT
title: Integrazione con Strumenti
permalink: tooling-integration-it-IT.html
prev: more-about-refs-it-IT.html
next: addons-it-IT.html
---
Ciascun progetto utilizza un sistema differente per la build e il deploy di JavaScript. Abbiamo provato a rendere React il più possibile indipendente dall'ambiente di sviluppo.
## React
### React hosted su un CDN
Offriamo versioni di React su CDN [nella nostra pagina dei download](/react/downloads.html). Questi file precompilati usano il formato dei moduli UMD. Inserirli con un semplice tag `<script>` inietterà una variabile globale `React` nel tuo ambiente. Questo approccio dovrebbe funzionare senza alcuna configurazione in ambienti CommonJS ed AMD.
### Usare il ramo master
Abbiamo istruzioni per compilare dal ramo `master` [nel nostro repositorio GitHub](https://github.com/facebook/react). Costruiamo un albero di moduli CommonJS sotto `build/modules` che puoi inserire in ogni ambiente o strumento di packaging che supporta CommonJS.
## JSX
### Trasformazione di JSX nel browser
Se preferisci usare JSX, Babel fornisce un [trasformatore ES6 e JSX nel browser per lo sviluppo](http://babeljs.io/docs/usage/browser/) chiamato browser.js che può essere incluso da una release npm `babel-core` oppure da [CDNJS](http://cdnjs.com/libraries/babel-core). Includi un tag `<script type="text/babel">` per scatenare il trasformatore JSX.
> Nota:
>
> Il trasformatore JSX nel browser è piuttosto grande e risulta in calcoli aggiuntivi lato client che possono essere evitati. Non utilizzare in produzione — vedi la sezione successiva.
### In Produzione: JSX Precompilato
Se hai [npm](https://www.npmjs.com/), puoi eseguire `npm install -g babel`. Babel include il supporto per React v0.12 e v0.13. I tag sono automaticamente trasformati negli equivalenti `React.createElement(...)`, `displayName` è automaticamente desunto e aggiunto a tutte le classi React.createClass.
Questo strumento tradurrà i file che usano la sintassi JSX a file in semplice JavaScript che possono essere eseguiti direttamente dal browser. Inoltre, osserverà le directory per te e trasformerà automaticamente i file quando vengono modificati; ad esempio: `babel --watch src/ --out-dir lib/`.
In maniera predefinita, vengono trasformati i file JSX con un'estensione `.js`. Esegui `babel --help` per maggiori informazioni su come usare Babel.
Output di esempio:
```
$ cat test.jsx
var HelloMessage = React.createClass({
render: function() {
return <div>Ciao {this.props.name}</div>;
}
});
ReactDOM.render(<HelloMessage name="John" />, mountNode);
$ babel test.jsx
"use strict";
var HelloMessage = React.createClass({
displayName: "HelloMessage",
render: function render() {
return React.createElement(
"div",
null,
"Hello ",
this.props.name
);
}
});
ReactDOM.render(React.createElement(HelloMessage, { name: "John" }), mountNode);
```
### Progetti Open Source Utili
La comunità open source ha creato strumenti che integrano JSX con diversi editor e sistemi di build. Consulta [integrazioni JSX ](https://github.com/facebook/react/wiki/Complementary-Tools#jsx-integrations) per una lista completa.

View File

@@ -38,4 +38,4 @@ JSXを使用したい場合、[ダウンロードページに](/react/downloads.
### 役に立つオープンソースのプロジェクト
オープンソースコミュニティがJSXをいくつかのエディタやビルドシステムで使用するためのツールを作成しました。一覧は[JSXのインテグレーション](https://github.com/facebook/react/wiki/Complementary-Tools#jsx-integrations)を参照してください。
オープンソースコミュニティがJSXをいくつかのエディタやビルドシステムで使用するためのツールを作成しました。一覧は[JSXのインテグレーション](https://github.com/facebook/react/wiki/Complementary-Tools#jsx-integrations)を参照してください。

View File

@@ -12,8 +12,7 @@ Every project uses a different system for building and deploying JavaScript. We'
### CDN-hosted React
We provide CDN-hosted versions of React [on our download page](/react/downloads.html). These prebuilt files use the UMD module format. Dropping them in with a simple `<script>` tag will inject a `React` global into your environment. It should also work out-of-the-box in CommonJS and AMD environments.
We provide CDN-hosted versions of React [on our download page](/react/downloads.html). These pre-built files use the UMD module format. Dropping them in with a simple `<script>` tag will inject a `React` global into your environment. It should also work out-of-the-box in CommonJS and AMD environments.
### Using master
@@ -29,7 +28,6 @@ If you like using JSX, Babel provides an [in-browser ES6 and JSX transformer for
>
> The in-browser JSX transformer is fairly large and results in extraneous computation client-side that can be avoided. Do not use it in production — see the next section.
### Productionizing: Precompiled JSX
If you have [npm](https://www.npmjs.com/), you can run `npm install -g babel`. Babel has built-in support for React v0.12 and v0.13. Tags are automatically transformed to their equivalent `React.createElement(...)`, `displayName` is automatically inferred and added to all React.createClass calls.
@@ -48,7 +46,7 @@ var HelloMessage = React.createClass({
}
});
React.render(<HelloMessage name="John" />, mountNode);
ReactDOM.render(<HelloMessage name="John" />, mountNode);
$ babel test.jsx
"use strict";
@@ -65,10 +63,9 @@ var HelloMessage = React.createClass({
}
});
React.render(React.createElement(HelloMessage, { name: "John" }), mountNode);
ReactDOM.render(React.createElement(HelloMessage, { name: "John" }), mountNode);
```
### Helpful Open-Source Projects
The open-source community has built tools that integrate JSX with several editors and build systems. See [JSX integrations](https://github.com/facebook/react/wiki/Complementary-Tools#jsx-integrations) for the full list.

View File

@@ -0,0 +1,74 @@
---
id: tooling-integration-zh-CN
title: 工具集成
permalink: tooling-integration-zh-CN.html
prev: more-about-refs-zh-CN.html
next: addons-zh-CN.html
---
每个项目使用一个不同的系统来建立和部署JavaScript.我们努力使React尽可能环境无关。
## React
### CDN-hosted React
我们提供了CDN-hosted版本的React[在我们的下载页面](/react/downloads.html).这些预构建的文件使用UMD模块格式。将他们放进一个简单的`<script>` 标签将会注入一个`React` 全局变量到你的环境里。这也同样在CommonJS 和 AMD 环境里开箱即用。
### 使用 master
我们[在我们的 GitHub repository](https://github.com/facebook/react)有从`master`构建的说明。我们在`build/modules` 下构建了一个CommonJS模块的树你可以把它放到任何支持CommonJS的环境或者打包工具里。
## JSX
### 浏览器中的JSX转化
如果你喜欢使用JSXBabel提供了一个被称为browser.js的[开发用的浏览器中的 ES6 和 JSX 转换器](http://babeljs.io/docs/usage/browser/) ,它可以从`babel-core` npm release 或者[CDNJS](http://cdnjs.com/libraries/babel-core) 中 include。Include `<script type="text/babel">` 标记来使用 JSX 转换器.
> 注意:
>
> 浏览器中的JSX转换器相当大并且导致额外的本可避免的客户端计算。不要在生产环境中使用 - 见下一节。
### 投入生产: 预编译 JSX
如果你有[npm](https://www.npmjs.com/),你可以运行 `npm install -g babel`. Babel 对React v0.12 和 v0.13 有内建的支持。 标签被自动转化为它们的等价物`React.createElement(...)`, `displayName` 被自动推断并添加到所有的React.createClass 调用。
这个工具会把使用JSX语法的文件转化为简单的可直接在浏览器运行的JavaScript文件。它同样将为你监视目录并自动转化文件当他们变动时例如`babel --watch src/ --out-dir lib/`.
默认模式下带有`.js`后缀的JSX文件被转化。运行 `babel --help` 获取更多关于如何使用 Babel 的信息。
输出的例子:
```
$ cat test.jsx
var HelloMessage = React.createClass({
render: function() {
return <div>Hello {this.props.name}</div>;
}
});
ReactDOM.render(<HelloMessage name="John" />, mountNode);
$ babel test.jsx
"use strict";
var HelloMessage = React.createClass({
displayName: "HelloMessage",
render: function render() {
return React.createElement(
"div",
null,
"Hello ",
this.props.name
);
}
});
ReactDOM.render(React.createElement(HelloMessage, { name: "John" }), mountNode);
```
### 有帮助的开源项目
开源社区已经创建了一些集成JSX到数个编辑器和构建系统的工具。参见[JSX integrations](https://github.com/facebook/react/wiki/Complementary-Tools#jsx-integrations) 查看全部列表。

View File

@@ -0,0 +1,25 @@
---
id: addons-it-IT
title: Add-ons
permalink: addons-it-IT.html
prev: tooling-integration-it-IT.html
next: animation-it-IT.html
---
`React.addons` è il luogo in cui parcheggiamo utili strumenti per costruire applicazioni React. **Questi strumenti devono essere considerati sperimentali** ma saranno eventualmente inclusi nel nucleo o una libreria ufficiale di utilities:
- [`TransitionGroup` e `CSSTransitionGroup`](animation-it-IT.html), per gestire animazioni e transizioni che sono solitamente difficili da implementare, come ad esempio prima della rimozione di un componente.
- [`LinkedStateMixin`](two-way-binding-helpers-it-IT.html), per semplificare la coordinazione tra lo stato del componente e l'input dell'utente in un modulo.
- [`cloneWithProps`](clone-with-props-it-IT.html), per eseguire una copia superficiale di componenti React e cambiare le loro proprietà.
- [`createFragment`](create-fragment-it-IT.html), per creare un insieme di figli con chiavi esterne.
- [`update`](update-it-IT.html), una funzione di utilità che semplifica la gestione di dati immutabili in JavaScript.
- [`PureRenderMixin`](pure-render-mixin-it-IT.html), un aiuto per incrementare le prestazioni in certe situazioni.
Gli add-ons elencati di seguito si trovano esclusivamente nella versione di sviluppo (non minificata) di React:
- [`TestUtils`](test-utils-it-IT.html), semplici helper per scrivere dei test case (soltanto nella build non minificata).
- [`Perf`](perf-it-IT.html), per misurare le prestazioni e fornirti suggerimenti per l'ottimizzazione.
Per ottenere gli add-on, usa `react-with-addons.js` (e la sua controparte non minificata) anziché il solito `react.js`.
Quandi si usa il pacchetto react di npm, richiedi semplicemente `require('react/addons')` anziché `require('react')` per ottenere React con tutti gli add-on.

View File

@@ -6,7 +6,7 @@ prev: tooling-integration.html
next: animation.html
---
`React.addons` is where we park some useful utilities for building React apps. **These should be considered experimental** but will eventually be rolled into core or a blessed utilities library:
The React add-ons are a collection of useful utility modules for building React apps. **These should be considered experimental** and tend to change more often than the core.
- [`TransitionGroup` and `CSSTransitionGroup`](animation.html), for dealing with animations and transitions that are usually not simple to implement, such as before a component's removal.
- [`LinkedStateMixin`](two-way-binding-helpers.html), to simplify the coordination between user's form input data and the component's state.
@@ -14,13 +14,10 @@ next: animation.html
- [`createFragment`](create-fragment.html), to create a set of externally-keyed children.
- [`update`](update.html), a helper function that makes dealing with immutable data in JavaScript easier.
- [`PureRenderMixin`](pure-render-mixin.html), a performance booster under certain situations.
- (DEPRECATED) [`classSet`](class-name-manipulation.html), for manipulating the DOM `class` string a bit more cleanly.
The add-ons below are in the development (unminified) version of React only:
- [`TestUtils`](test-utils.html), simple helpers for writing test cases (unminified build only).
- [`Perf`](perf.html), for measuring performance and giving you hint where to optimize.
To get the add-ons, use `react-with-addons.js` (and its minified counterpart) rather than the common `react.js`.
When using the react package from npm, simply `require('react/addons')` instead of `require('react')` to get React with all of the add-ons.
To get the add-ons, install them individually from npm (e.g., `npm install react-addons-pure-render-mixin`). We don't support using the addons if you're not using npm.

View File

@@ -0,0 +1,25 @@
---
id: addons-zh-CN
title: 插件
permalink: addons-zh-CN.html
prev: tooling-integration-zh-CN.html
next: animation-zh-CN.html
---
`React.addons` 是我们放置一些用来构建React apps的有用的工具的地方。 **这些应该被认为是实验性的** 但是最终批量进入核心代码或者一个有用的工具库中:
- [`TransitionGroup` 和 `CSSTransitionGroup`](animation.html), 用来处理通常不能简单实现的动画和转换,比如在组件移除之前。
- [`LinkedStateMixin`](two-way-binding-helpers.html), 简化用户的表单输入数据与组件状态的协调。
- [`cloneWithProps`](clone-with-props.html), 创建React组件的浅拷贝并改变它们的props。
- [`createFragment`](create-fragment.html), 创建一组外键的子级。
- [`update`](update.html), 一个使不可变数据在JavaScript里更易处理的辅助函数。
- [`PureRenderMixin`](pure-render-mixin.html), 一个特定情况下的性能优化器。
下面的插件只存在开发版(未压缩)React中
- [`TestUtils`](test-utils.html), 用于写测试用例的简单的辅助工具(仅存在于未压缩版本)。
- [`Perf`](perf.html), 用于测量性能并给你提示哪里可以优化。
要获取插件,使用 `react-with-addons.js` (和它的压缩副本)而不是通常的 `react.js`
当从npm使用react包时简单的用`require('react/addons')` 代替 `require('react')` 来获取带有所有插件的React。

Some files were not shown because too many files have changed in this diff Show More