From fec4df7150c2ebb21372be809059d44e1e652434 Mon Sep 17 00:00:00 2001 From: Travis CI Date: Mon, 10 Oct 2016 16:32:22 +0000 Subject: [PATCH] Rebuild website --- contributing/codebase-overview.html | 129 +- contributing/design-principles.html | 4 + contributing/how-to-contribute.html | 16 +- contributing/implementation-notes.html | 1274 +++++++++++++++++ docs/addons-it-IT.html | 4 + docs/addons-ja-JP.html | 4 + docs/addons-ko-KR.html | 4 + docs/addons-zh-CN.html | 4 + docs/addons.html | 4 + docs/advanced-performance-it-IT.html | 4 + docs/advanced-performance-ja-JP.html | 4 + docs/advanced-performance-ko-KR.html | 4 + docs/advanced-performance-zh-CN.html | 4 + docs/advanced-performance.html | 4 + docs/animation-it-IT.html | 4 + docs/animation-ja-JP.html | 4 + docs/animation-ko-KR.html | 4 + docs/animation-zh-CN.html | 4 + docs/animation.html | 4 + docs/class-name-manipulation-it-IT.html | 4 + docs/class-name-manipulation-ja-JP.html | 4 + docs/class-name-manipulation-ko-KR.html | 4 + docs/class-name-manipulation-zh-CN.html | 4 + docs/class-name-manipulation.html | 4 + docs/clone-with-props-it-IT.html | 4 + docs/clone-with-props-ja-JP.html | 4 + docs/clone-with-props-ko-KR.html | 4 + docs/clone-with-props-zh-CN.html | 4 + docs/clone-with-props.html | 4 + docs/component-api-it-IT.html | 4 + docs/component-api-ko-KR.html | 4 + docs/component-api-zh-CN.html | 4 + docs/component-api.html | 4 + docs/component-specs-it-IT.html | 4 + docs/component-specs-ko-KR.html | 4 + docs/component-specs-zh-CN.html | 4 + docs/component-specs.html | 4 + docs/conferences-it-IT.html | 4 + docs/conferences-ko-KR.html | 4 + docs/conferences-zh-CN.html | 4 + docs/conferences.html | 4 + docs/context-ko-KR.html | 4 + docs/context-zh-CN.html | 4 + docs/context.html | 4 + docs/create-fragment-it-IT.html | 4 + docs/create-fragment-ja-JP.html | 4 + docs/create-fragment-ko-KR.html | 4 + docs/create-fragment-zh-CN.html | 4 + docs/create-fragment.html | 4 + docs/displaying-data-it-IT.html | 4 + docs/displaying-data-ja-JP.html | 4 + docs/displaying-data-ko-KR.html | 4 + docs/displaying-data-ru-RU.html | 4 + docs/displaying-data-zh-CN.html | 4 + docs/displaying-data-zh-TW.html | 4 + docs/displaying-data.html | 4 + docs/dom-differences-it-IT.html | 4 + docs/dom-differences-ko-KR.html | 4 + docs/dom-differences-zh-CN.html | 4 + docs/dom-differences.html | 4 + docs/environments.html | 4 + docs/error-decoder.html | 4 + docs/events-it-IT.html | 4 + docs/events-ko-KR.html | 4 + docs/events-zh-CN.html | 4 + docs/events.html | 4 + docs/flux-overview-it-IT.html | 4 + docs/flux-overview-ko-KR.html | 4 + docs/flux-overview-zh-CN.html | 4 + docs/flux-overview.html | 4 + docs/flux-todo-list-it-IT.html | 4 + docs/flux-todo-list-ko-KR.html | 4 + docs/flux-todo-list-zh-CN.html | 4 + docs/flux-todo-list.html | 4 + docs/forms-it-IT.html | 4 + docs/forms-ja-JP.html | 4 + docs/forms-ko-KR.html | 4 + docs/forms-zh-CN.html | 4 + docs/forms.html | 4 + docs/getting-started-it-IT.html | 4 + docs/getting-started-ja-JP.html | 4 + docs/getting-started-ko-KR.html | 4 + docs/getting-started-zh-CN.html | 4 + docs/getting-started.html | 4 + docs/glossary-it-IT.html | 4 + docs/glossary-ko-KR.html | 4 + docs/glossary-zh-CN.html | 4 + docs/glossary.html | 4 + docs/interactivity-and-dynamic-uis-it-IT.html | 4 + docs/interactivity-and-dynamic-uis-ja-JP.html | 4 + docs/interactivity-and-dynamic-uis-ko-KR.html | 4 + docs/interactivity-and-dynamic-uis-ru-RU.html | 4 + docs/interactivity-and-dynamic-uis-zh-CN.html | 4 + docs/interactivity-and-dynamic-uis.html | 4 + docs/jsx-gotchas-it-IT.html | 4 + docs/jsx-gotchas-ja-JP.html | 4 + docs/jsx-gotchas-ko-KR.html | 4 + docs/jsx-gotchas-zh-CN.html | 4 + docs/jsx-gotchas.html | 4 + docs/jsx-in-depth-it-IT.html | 4 + docs/jsx-in-depth-ja-JP.html | 4 + docs/jsx-in-depth-ko-KR.html | 4 + docs/jsx-in-depth-zh-CN.html | 4 + docs/jsx-in-depth.html | 4 + docs/jsx-spread-it-IT.html | 4 + docs/jsx-spread-ja-JP.html | 4 + docs/jsx-spread-ko-KR.html | 4 + docs/jsx-spread-zh-CN.html | 4 + docs/jsx-spread.html | 4 + docs/language-tooling.html | 4 + docs/more-about-refs-it-IT.html | 4 + docs/more-about-refs-ja-JP.html | 4 + docs/more-about-refs-ko-KR.html | 4 + docs/more-about-refs-zh-CN.html | 4 + docs/more-about-refs.html | 4 + docs/multiple-components-it-IT.html | 4 + docs/multiple-components-ja-JP.html | 4 + docs/multiple-components-ko-KR.html | 4 + docs/multiple-components-zh-CN.html | 4 + docs/multiple-components.html | 4 + docs/package-management.html | 4 + docs/perf-it-IT.html | 4 + docs/perf-ja-JP.html | 4 + docs/perf-ko-KR.html | 4 + docs/perf-zh-CN.html | 4 + docs/perf.html | 4 + docs/pure-render-mixin-it-IT.html | 4 + docs/pure-render-mixin-ja-JP.html | 4 + docs/pure-render-mixin-ko-KR.html | 4 + docs/pure-render-mixin-zh-CN.html | 4 + docs/pure-render-mixin.html | 4 + docs/reconciliation-it-IT.html | 4 + docs/reconciliation-ko-KR.html | 4 + docs/reconciliation.html | 4 + docs/reusable-components-it-IT.html | 4 + docs/reusable-components-ja-JP.html | 4 + docs/reusable-components-ko-KR.html | 4 + docs/reusable-components-zh-CN.html | 4 + docs/reusable-components.html | 4 + docs/shallow-compare-zh-CN.html | 4 + docs/shallow-compare.html | 4 + docs/special-non-dom-attributes-it-IT.html | 4 + docs/special-non-dom-attributes-ko-KR.html | 4 + docs/special-non-dom-attributes-zh-CN.html | 4 + docs/special-non-dom-attributes.html | 4 + docs/tags-and-attributes-it-IT.html | 4 + docs/tags-and-attributes-ko-KR.html | 4 + docs/tags-and-attributes-zh-CN.html | 4 + docs/tags-and-attributes.html | 4 + docs/test-utils-it-IT.html | 4 + docs/test-utils-ja-JP.html | 4 + docs/test-utils-ko-KR.html | 4 + docs/test-utils-zh-CN.html | 4 + docs/test-utils.html | 4 + docs/thinking-in-react-it-IT.html | 4 + docs/thinking-in-react-ja-JP.html | 4 + docs/thinking-in-react-ko-KR.html | 4 + docs/thinking-in-react-zh-CN.html | 4 + docs/thinking-in-react.html | 4 + docs/tooling-integration-it-IT.html | 4 + docs/tooling-integration-ja-JP.html | 4 + docs/tooling-integration-ko-KR.html | 4 + docs/tooling-integration-zh-CN.html | 4 + docs/tooling-integration.html | 4 + docs/top-level-api-it-IT.html | 4 + docs/top-level-api-ja-JP.html | 4 + docs/top-level-api-ko-KR.html | 4 + docs/top-level-api-zh-CN.html | 4 + docs/top-level-api.html | 4 + docs/transferring-props-it-IT.html | 4 + docs/transferring-props-ja-JP.html | 4 + docs/transferring-props-ko-KR.html | 4 + docs/transferring-props-zh-CN.html | 4 + docs/transferring-props.html | 4 + docs/tutorial-it-IT.html | 4 + docs/tutorial-ja-JP.html | 4 + docs/tutorial-ko-KR.html | 4 + docs/tutorial-zh-CN.html | 4 + docs/tutorial.html | 4 + docs/two-way-binding-helpers-it-IT.html | 4 + docs/two-way-binding-helpers-ja-JP.html | 4 + docs/two-way-binding-helpers-ko-KR.html | 4 + docs/two-way-binding-helpers-zh-CN.html | 4 + docs/two-way-binding-helpers.html | 4 + docs/update-it-IT.html | 4 + docs/update-ja-JP.html | 4 + docs/update-ko-KR.html | 4 + docs/update-zh-CN.html | 4 + docs/update.html | 4 + docs/videos-it-IT.html | 4 + docs/videos-ko-KR.html | 4 + docs/videos-zh-CN.html | 4 + docs/videos.html | 4 + docs/webcomponents-zh-CN.html | 4 + docs/webcomponents.html | 4 + docs/why-react-de-DE.html | 4 + docs/why-react-it-IT.html | 4 + docs/why-react-ja-JP.html | 4 + docs/why-react-ko-KR.html | 4 + docs/why-react-ru-RU.html | 4 + docs/why-react-zh-CN.html | 4 + docs/why-react-zh-TW.html | 4 + docs/why-react.html | 4 + docs/working-with-the-browser-it-IT.html | 4 + docs/working-with-the-browser-ja-JP.html | 4 + docs/working-with-the-browser-ko-KR.html | 4 + docs/working-with-the-browser-zh-CN.html | 4 + docs/working-with-the-browser.html | 4 + img/docs/implementation-notes-tree.png | Bin 0 -> 59918 bytes tips/children-props-type-ko-KR.html | 4 + tips/children-props-type.html | 4 + tips/children-undefined-ko-KR.html | 4 + tips/children-undefined.html | 4 + .../communicate-between-components-ko-KR.html | 4 + tips/communicate-between-components.html | 4 + ...ps-not-triggered-after-mounting-ko-KR.html | 4 + ...iveProps-not-triggered-after-mounting.html | 4 + tips/controlled-input-null-value-ko-KR.html | 4 + tips/controlled-input-null-value.html | 4 + tips/dangerously-set-inner-html-ko-KR.html | 4 + tips/dangerously-set-inner-html.html | 4 + tips/dom-event-listeners-ko-KR.html | 4 + tips/dom-event-listeners.html | 4 + tips/expose-component-functions-ko-KR.html | 4 + tips/expose-component-functions-zh-CN.html | 4 + tips/expose-component-functions.html | 4 + tips/false-in-jsx-ko-KR.html | 4 + tips/false-in-jsx.html | 4 + tips/if-else-in-JSX-ko-KR.html | 4 + tips/if-else-in-JSX-ru-RU.html | 4 + tips/if-else-in-JSX.html | 4 + tips/initial-ajax-ko-KR.html | 4 + tips/initial-ajax.html | 4 + tips/inline-styles-ko-KR.html | 4 + tips/inline-styles-ru-RU.html | 4 + tips/inline-styles.html | 4 + tips/introduction-ja-JP.html | 4 + tips/introduction-ko-KR.html | 4 + tips/introduction-ru-RU.html | 4 + tips/introduction.html | 4 + ...aximum-number-of-jsx-root-nodes-ko-KR.html | 4 + ...aximum-number-of-jsx-root-nodes-ru-RU.html | 4 + tips/maximum-number-of-jsx-root-nodes.html | 4 + ...getInitialState-as-anti-pattern-ko-KR.html | 4 + ...ps-in-getInitialState-as-anti-pattern.html | 4 + tips/references-to-components-ko-KR.html | 4 + tips/references-to-components.html | 4 + tips/self-closing-tag-ja-JP.html | 4 + tips/self-closing-tag-ko-KR.html | 4 + tips/self-closing-tag-ru-RU.html | 4 + tips/self-closing-tag.html | 4 + tips/style-props-value-px-ko-KR.html | 4 + tips/style-props-value-px-ru-RU.html | 4 + tips/style-props-value-px.html | 4 + .../use-react-with-other-libraries-ko-KR.html | 4 + tips/use-react-with-other-libraries.html | 4 + 256 files changed, 2418 insertions(+), 9 deletions(-) create mode 100644 contributing/implementation-notes.html create mode 100644 img/docs/implementation-notes-tree.png diff --git a/contributing/codebase-overview.html b/contributing/codebase-overview.html index c6758af992..ef4469df36 100644 --- a/contributing/codebase-overview.html +++ b/contributing/codebase-overview.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • @@ -470,7 +474,7 @@

    When we compile React for npm, a script copies all the modules into a single flat directory called lib and prepends all require() paths with ./. This way Node, Browserify, Webpack, and other tools can understand React build output without being aware of Haste.

    -

    If you're reading React source on GitHub and want to quickly jump to any file, press "t".

    +

    If you're reading React source on GitHub and want to jump to a file, press "t".

    This is a GitHub shortcut for searching the current repo for fuzzy filename matches. Start typing the name of the file you are looking for, and it will show up as the first match.

    External Dependencies #

    @@ -495,6 +499,20 @@

    We don't have a top-level directory for unit tests. Instead, we put them into a directories called __tests__ relative to the files that they test.

    For example, a test for setInnerHTML.js is located in __tests__/setInnerHTML-test.js right next to it.

    +

    Shared Code #

    +

    Even though Haste allows to import any module from anywhere in the repository, we follow a convention to avoid cyclic dependencies and other unpleasant surprises. By convention, a file may only import files in the same folder or in subfolders below.

    + +

    For example, files inside src/renderers/dom/client may import other files in the same folder ot below.

    + +

    However they can't import modules from src/renderers/dom/server because it is not a child directory of src/renderers/dom/client.

    + +

    There is an exception to this rule. Sometimes we do need to share functionality between two groups of modules. In this case we hoist it up to a folder called shared inside their closest common ancestor folder.

    + +

    For example, code shared between src/renderers/dom/client and src/renderers/dom/server lives in src/renderers/dom/shared.

    + +

    By the same logic, if src/renderers/dom/client needs to share a utility with something in src/renderers/native, this utility would be in src/renderers/shared.

    + +

    This convention is not enforced but we check for it during a pull request review.

    Warnings and Invariants #

    React codebase uses the warning module to display warnings:

    var warning = require('warning');
    @@ -542,7 +560,108 @@
     
    if (__DEV__) {
       // This code will only run in development.
     }
    -

    Multiple Packages #

    +

     JSDoc #

    +

    Some of the internal and public methods are annotated with JSDoc annotations:

    +
    /**
    +  * Updates this component by updating the text content.
    +  *
    +  * @param {ReactText} nextText The next text content
    +  * @param {ReactReconcileTransaction} transaction
    +  * @internal
    +  */
    +receiveComponent: function(nextText, transaction) {
    +  // ...
    +},
    +
    +

    We try to keep existing annotations up-to-date but we don't enforce them. We don't use JSDoc in the newly written code, and instead use Flow to document and enforce types.

    +

    Flow #

    +

    We recently started introducing Flow checks to the codebase. Files marked with the @flow annotation in the license header comment are being typechecked.

    + +

    We accept pull requests adding Flow annotations to existing code. Flow annotations look like this:

    +
    ReactRef.detachRefs = function(
    +  instance: ReactInstance,
    +  element: ReactElement | string | number | null | false,
    +): void {
    +  // ...
    +}
    +
    +

    When possible, new code should use Flow annotations.
    +You can run npm run flow locally to check your code with Flow.

    +

    Classes and Mixins #

    +

    React was originally written in ES5. We have since enabled ES2015 features with Babel, including classes. However most of React code is still written in ES5.

    + +

    In particular, you might see the following pattern quite often:

    +
    // Constructor
    +function ReactDOMComponent(element) {
    +  this._currentElement = element;
    +}
    +
    +// Methods
    +ReactDOMComponent.Mixin = {
    +  mountComponent: function() {
    +    // ...
    +  }
    +};
    +
    +// Put methods on the prototype
    +Object.assign(
    +  ReactDOMComponent.prototype,
    +  ReactDOMComponent.Mixin
    +);
    +
    +module.exports = ReactDOMComponent;
    +
    +

    The Mixin in this code has no relation to React mixins feature. It is just a way of grouping a few methods under an object. Those methods may later get attached to some other class. We use this pattern in a few places although we try to avoid it in the new code.

    + +

    Equivalent code in ES2015 would like this:

    +
    class ReactDOMComponent {
    +  constructor(element) {
    +    this._currentElement = element;
    +  }
    +
    +  mountComponent() {
    +    // ...
    +  }
    +}
    +
    +module.exports = ReactDOMComponent;
    +
    +

    Sometimes we convert old code to ES2015 classes. However this is not very important to us because there is an ongoing effort to replace the React reconciler implementation with a less object-oriented approach which wouldn't use classes at all.

    +

    Dynamic Injection #

    +

    React uses dynamic injection in some modules. While it is always explicit, it is still unfortunate because it hinders understanding of the code. The main reason it exists is because React originally only supported DOM as a target. React Native started as a React fork. We had to add dynamic injection to React to let React Native override some behaviors.

    + +

    You may see modules declaring their dynamic dependencies like this:

    +
    // Dynamically injected
    +var textComponentClass = null;
    +
    +// Relies on dynamically injected value
    +function createInstanceForText(text) {
    +  return new textComponentClass(text);
    +}
    +
    +var ReactHostComponent = {
    +  createInstanceForText,
    +
    +  // Provides an opportunity for dynamic injection
    +  injection: {
    +    injectTextComponentClass: function(componentClass) {
    +      textComponentClass = componentClass;
    +    },
    +  },
    +};
    +
    +module.exports = ReactHostComponent;
    +
    +

    The injection field is not handled specially in any way. But by convention, it means that this module wants to have some (presumably platform-specific) dependencies injected into it at runtime.

    + +

    In React DOM, ReactDefaultInjection injects a DOM-specific implementation:

    +
    ReactHostComponent.injection.injectTextComponentClass(ReactDOMTextComponent);
    +
    +

    In React Native, ReactNativeDefaultInjection injects its own implementation:

    +
    ReactHostComponent.injection.injectTextComponentClass(ReactNativeTextComponent);
    +
    +

    There are multiple injection points in the codebase. In the future, we intend to get rid of the dynamic injection mechanism and wire up all the pieces statically during the build.

    +

    Multiple Packages #

    React is a monorepo. Its repository contains multiple separate packages so that their changes can be coordinated together, and documentation and issues live in one place.

    The npm metadata such as package.json files is located in the packages top-level folder. However there is almost no real code in it.

    @@ -620,6 +739,8 @@

    During an update, the stack reconciler "drills down" through composite components, runs their render() methods, and decides whether to update or replace their single child instance. It executes platform-specific code as it passes through the host components like <div> and <View>. Host components may have multiple children which are also processed recursively.

    It is important to understand that the stack reconciler always processes the component tree synchronously in a single pass. While individual tree branches may bail out of reconciliation, the stack reconciler can't pause, and so it is suboptimal when the updates are deep and the available CPU time is limited.

    +

     Learn More #

    +

    The next section describes the current implementation in more details.

    Fiber Reconciler #

    The "fiber" reconciler is a new effort aiming to resolve the problems inherent in the stack reconciler and fix a few long-standing issues.

    @@ -647,7 +768,7 @@

    Additionally, we provide a standalone build called react-with-addons.js which includes React core and all add-ons exposed on the addons field of the React global object.

    What Next? #

    -

    Learn the design principles guiding development of React in the next section.

    +

    Read the next section to learn about the current implementation of reconciler in more detail.

    @@ -655,7 +776,7 @@ ← Prev - Next → + Next →
    diff --git a/contributing/design-principles.html b/contributing/design-principles.html index 5bc08e870f..a1d9487405 100644 --- a/contributing/design-principles.html +++ b/contributing/design-principles.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/contributing/how-to-contribute.html b/contributing/how-to-contribute.html index 48153ecf96..c3004a20d5 100644 --- a/contributing/how-to-contribute.html +++ b/contributing/how-to-contribute.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • @@ -488,6 +492,7 @@
  • If you've changed APIs, update the documentation.
  • Ensure the test suite passes (npm test).
  • Make sure your code lints (npm run lint).
  • +
  • Run the Flow typechecks (npm run flow).
  • If you haven't already, complete the CLA.
  • Contributor License Agreement (CLA) #

    @@ -510,6 +515,7 @@ Then, you can run several commands:

  • npm test runs the complete test suite.
  • npm test -- --watch runs an interactive test watcher.
  • npm test <pattern> runs tests with matching filenames.
  • +
  • npm run flow runs the Flow typechecks.
  • npm run build creates a build folder with all the packages.
  • @@ -543,14 +549,14 @@ You can check the status of your code styling by simply running npm run li
  • Write "attractive" code
  • Do not use the optional parameters of setTimeout and setInterval
  • -

    License #

    -

    By contributing to React, you agree that your contributions will be licensed under its BSD license.

    +

    Introductory Video #

    +

    You may be interested in watching this short video (26 mins) which gives an introduction on how to contribute to React.

    Meeting Notes #

    React team meets once a week to discuss the development of React, future plans, and priorities. You can find the meeting notes in a dedicated repository.

    +

    License #

    +

    By contributing to React, you agree that your contributions will be licensed under its BSD license.

    What Next? #

    -

    You may be interested in watching this short video (26 mins) which gives an introduction on how to contribute to React.

    - -

    Read the next sections to learn more about understanding the codebase, and the design principles guiding the development of React.

    +

    Read the next section to learn how the codebase is organized.

    diff --git a/contributing/implementation-notes.html b/contributing/implementation-notes.html new file mode 100644 index 0000000000..717a54d7fb --- /dev/null +++ b/contributing/implementation-notes.html @@ -0,0 +1,1274 @@ + + + + + + + Implementation Notes | React + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + +
    + + + +
    +

    Implementation Notes

    +
    +

    This section is a collection of implementation notes for the stack reconciler.

    + +

    It is very technical and assumes a strong understanding of React public API as well as how it's divided into core, renderers, and the reconciler. If you're not very familiar with the React codebase, read the codebase overview first.

    + +

    The stack reconciler is powering all the React production code today. It is located in src/renderers/shared/stack/reconciler and is used by both React DOM and React Native.

    +

    Video: Building React from Scratch #

    +

    Paul O'Shannessy gave a talk about building React from scratch that largely inspired this document.

    + +

    Both this document and his talk are simplifications of the real codebase so you might get a better understanding by getting familiar with both of them.

    +

    Overview #

    +

    The reconciler itself doesn't have a public API. Renderers like React DOM and React Native use it to efficiently update the user interface according to the React components written by the user.

    +

    Mounting as a Recursive Process #

    +

    Let's consider the first time you mount a component:

    +
    ReactDOM.render(<App />, rootEl);
    +
    +

    React DOM will pass <App /> along to the reconciler. Remember that <App /> is a React element, that is, a description of what to render. You can think about it as a plain object:

    +
    console.log(<App />);
    +// { type: App, props: {} }
    +
    +

    The reconciler will check if App is a class or a function.

    + +

    If App is a function, the reconciler will call App(props) to get the rendered element.

    + +

    If App is a class, the reconciler will instantiate an App with new App(props), call the componentWillMount() lifecycle method, and then will call the render() method to get the rendered element.

    + +

    Either way, the reconciler will learn the element App "rendered to".

    + +

    This process is recursive. App may render to a <Greeting />, Greeting may render to a <Button />, and so on. The reconciler will "drill down" through user-defined components recursively as it learns what each component renders to.

    + +

    You can imagine this process as a pseudocode:

    +
    function isClass(type) {
    +  // React.Component subclasses have this flag
    +  return (
    +    Boolean(type.prototype) &&
    +    Boolean(type.prototype.isReactComponent)
    +  );
    +}
    +
    +// This function takes a React element (e.g. <App />)
    +// and returns a DOM or Native node representing the mounted tree.
    +function mount(element) {
    +  var type = element.type;
    +  var props = element.props;
    +
    +  // We will determine the rendered element
    +  // by either running the type as function
    +  // or creating an instance and calling render().
    +  var renderedElement;
    +  if (isClass(type)) {
    +    // Component class
    +    var publicInstance = new type(props);
    +    // Set the props
    +    publicInstance.props = props;
    +    // Call the lifecycle if necessary
    +    if (publicInstance.componentWillMount) {
    +      publicInstance.componentWillMount();
    +    }
    +    // Get the rendered element by calling render()
    +    renderedElement = publicInstance.render();
    +  } else {
    +    // Component function
    +    renderedElement = type(props);
    +  }
    +
    +  // This process is recursive because a component may
    +  // return an element with a type of another component.
    +  return mount(renderedElement);
    +
    +  // Note: this implementation is incomplete and recurses infinitely!
    +  // It only handles elements like <App /> or <Button />.
    +  // It doesn't handle elements like <div /> or <p /> yet.
    +}
    +
    +var rootEl = document.getElementById('root');
    +var node = mount(<App />);
    +rootEl.appendChild(node);
    +
    +
    +

    Note:

    + +

    This really is a pseudo-code. It isn't similar to the real implementation. It will also cause a stack overflow because we haven't discussed when to stop the recursion.

    +
    + +

    Let's recap a few key ideas in the example above:

    + +
      +
    • React elements are plain objects representing the component type (e.g. App) and the props.
    • +
    • User-defined components (e.g. App) can be classes or functions but they all "render to" elements.
    • +
    • "Mounting" is a recursive process that creates a DOM or Native tree given the top-level React element (e.g. <App />).
    • +
    +

    Mounting Host Elements #

    +

    This process would be useless if we didn't render something to the screen as a result.

    + +

    In addition to user-defined ("composite") components, React elements may also represent platform-specific ("host") components. For example, Button might return a <div /> from its render method.

    + +

    If element's type property is a string, we are dealing with a host element:

    +
    console.log(<div />);
    +// { type: 'div', props: {} }
    +
    +

    There is no user-defined code associated with host elements.

    + +

    When the reconciler encounters a host element, it lets the renderer take care of mounting it. For example, React DOM would create a DOM node.

    + +

    If the host element has children, the reconciler recursively mounts them following the same algorithm as above. It doesn't matter whether children are host (like <div><hr /></div>), composite (like <div><Button /></div>), or both.

    + +

    The DOM nodes produced by the child components will be appended to the parent DOM node, and recursively, the complete DOM structure will be assembled.

    + +
    +

    Note:

    + +

    The reconciler itself is not tied to the DOM. The exact result of mounting (sometimes called "mount image" in the source code) depends on the renderer, and can be a DOM node (React DOM), a string (React DOM Server), or a number representing a native view (React Native).

    +
    + +

    If we were to extend the code to handle host elements, it would look like this:

    +
    function isClass(type) {
    +  // React.Component subclasses have this flag
    +  return (
    +    Boolean(type.prototype) &&
    +    Boolean(type.prototype.isReactComponent)
    +  );
    +}
    +
    +// This function only handles elements with a composite type.
    +// For example, it handles <App /> and <Button />, but not a <div />.
    +function mountComposite(element) {
    +  var type = element.type;
    +  var props = element.props;
    +
    +  var renderedElement;
    +  if (isClass(type)) {
    +    // Component class
    +    var publicInstance = new type(props);
    +    // Set the props
    +    publicInstance.props = props;
    +    // Call the lifecycle if necessary
    +    if (publicInstance.componentWillMount) {
    +      publicInstance.componentWillMount();
    +    }
    +    renderedElement = publicInstance.render();
    +  } else if (typeof type === 'function') {
    +    // Component function
    +    renderedElement = type(props);
    +  }
    +
    +  // This is recursive but we'll eventually reach the bottom of recursion when
    +  // the element is host (e.g. <div />) rather than composite (e.g. <App />):
    +  return mount(renderedElement);
    +}
    +
    +// This function only handles elements with a host type.
    +// For example, it handles <div /> and <p /> but not an <App />.
    +function mountHost(element) {
    +  var type = element.type;
    +  var props = element.props;
    +  var children = props.children || [];
    +  if (!Array.isArray(children)) {
    +    children = [children];
    +  }
    +  children = children.filter(Boolean);
    +
    +  // This block of code shouldn't be in the reconciler.
    +  // Different renderers might initialize nodes differently.
    +  // For example, React Native would create iOS or Android views.
    +  var node = document.createElement(type);
    +  Object.keys(props).forEach(propName => {
    +    if (propName !== 'children') {
    +      node.setAttribute(propName, props[propName]);
    +    }
    +  });
    +
    +  // Mount the children
    +  children.forEach(childElement => {
    +    // Children may be host (e.g. <div />) or composite (e.g. <Button />).
    +    // We will also mount them recursively:
    +    var childNode = mount(childElement);
    +
    +    // This line of code is also renderer-specific.
    +    // It would be different depending on the renderer:
    +    node.appendChild(childNode);
    +  });
    +
    +  // Return the DOM node as mount result.
    +  // This is where the recursion ends.
    +  return node;
    +}
    +
    +function mount(element) {
    +  var type = element.type;
    +  if (typeof type === 'function') {
    +    // User-defined components
    +    return mountComposite(element);
    +  } else if (typeof type === 'string') {
    +    // Platform-specific components
    +    return mountHost(element);
    +  }
    +}
    +
    +var rootEl = document.getElementById('root');
    +var node = mount(<App />);
    +rootEl.appendChild(node);
    +
    +

    This is working but still far from how the reconciler is really implemented. The key missing ingredient is support for updates.

    +

    Introducing Internal Instances #

    +

    The key feature of React is that you can re-render everything, and it won't recreate the DOM or reset the state:

    +
    ReactDOM.render(<App />, rootEl);
    +// Should reuse the existing DOM:
    +ReactDOM.render(<App />, rootEl);
    +
    +

    However, our implementation above only knows how to mount the initial tree. It can't perform updates on it because it doesn't store all the necessary information, such as all the publicInstances, or which DOM nodes correspond to which components.

    + +

    The stack reconciler codebase solves this by making the mount() function a method and putting it on a class. There are drawbacks to this approach, and we are going in the opposite direction in the ongoing rewrite of the reconciler. Nevertheless this is how it works now.

    + +

    Instead of separate mountHost and mountComposite functions, we will create two classes: DOMComponent and CompositeComponent.

    + +

    Both classes have a constructor accepting the element, as well as a mount() method returning the mounted node. We will replace a top-level mount() function with a factory that instantiates the correct class:

    +
    function instantiateComponent(element) {
    +  var type = element.type;
    +  if (typeof type === 'function') {
    +    // User-defined components
    +    return new CompositeComponent(element);
    +  } else if (typeof type === 'string') {
    +    // Platform-specific components
    +    return new DOMComponent(element);
    +  }  
    +}
    +
    +

    First, let's consider the implementation of CompositeComponent:

    +
    class CompositeComponent {
    +  constructor(element) {
    +    this.currentElement = element;
    +    this.renderedComponent = null;
    +    this.publicInstance = null;
    +  }
    +
    +  getPublicInstance() {
    +    // For composite components, expose the class instance.
    +    return this.publicInstance;
    +  }
    +
    +  mount() {
    +    var element = this.currentElement;
    +    var type = element.type;
    +    var props = element.props;
    +
    +    var publicInstance;
    +    var renderedElement;
    +    if (isClass(type)) {
    +      // Component class
    +      publicInstance = new type(props);
    +      // Set the props
    +      publicInstance.props = props;
    +      // Call the lifecycle if necessary
    +      if (publicInstance.componentWillMount) {
    +        publicInstance.componentWillMount();
    +      }
    +      renderedElement = publicInstance.render();
    +    } else if (typeof type === 'function') {
    +      // Component function
    +      publicInstance = null;
    +      renderedElement = type(props);
    +    }
    +
    +    // Save the public instance
    +    this.publicInstance = publicInstance;
    +
    +    // Instantiate the child internal instance according to the element.
    +    // It would be a DOMComponent for <div /> or <p />,
    +    // and a CompositeComponent for <App /> or <Button />:
    +    var renderedComponent = instantiateComponent(renderedElement);
    +    this.renderedComponent = renderedComponent;
    +
    +    // Mount the rendered output
    +    return renderedComponent.mount();
    +  }
    +}
    +
    +

    This is not much different from our previous mountComposite() implementation, but now we can save some information, such as this.currentElement, this.renderedComponent, and this.publicInstance, for use during updates.

    + +

    Note that an instance of CompositeComponent is not the same thing as an instance of the user-supplied element.type. CompositeComponent is an implementation detail of our reconciler, and is never exposed to the user. The user-defined class is the one we read from element.type, and CompositeComponent creates an instance of it.

    + +

    To avoid the confusion, we will call instances of CompositeComponent and DOMComponent "internal instances". They exist so we can associate some long-lived data with them. Only the renderer and the reconciler are aware that they exist.

    + +

    In contrast, we call an instance of the user-defined class a "public instance". The public instance is what you see as this in the render() and other methods of your custom components.

    + +

    The mountHost() function, refactored to be a mount() method on DOMComponent class, also looks familiar:

    +
    class DOMComponent {
    +  constructor(element) {
    +    this.currentElement = element;
    +    this.renderedChildren = [];
    +    this.node = null;
    +  }
    +
    +  getPublicInstance() {
    +    // For DOM components, only expose the DOM node.
    +    return this.node;
    +  }
    +
    +  mount() {
    +    var element = this.currentElement;
    +    var type = element.type;
    +    var props = element.props;
    +    var children = props.children || [];
    +    if (!Array.isArray(children)) {
    +      children = [children];
    +    }
    +
    +    // Create and save the node
    +    var node = document.createElement(type);
    +    this.node = node;
    +
    +    // Set the attributes
    +    Object.keys(props).forEach(propName => {
    +      if (propName !== 'children') {
    +        node.setAttribute(propName, props[propName]);
    +      }
    +    });
    +
    +    // Create and save the contained children.
    +    // Each of them can be a DOMComponent or a CompositeComponent,
    +    // depending on whether the element type is a string or a function.
    +    var renderedChildren = children.map(instantiateComponent);
    +    this.renderedChildren = renderedChildren;
    +
    +    // Collect DOM nodes they return on mount
    +    var childNodes = renderedChildren.map(child => child.mount());
    +    childNodes.forEach(childNode => node.appendChild(childNode));
    +
    +    // Return the DOM node as mount result
    +    return node;
    +  }
    +}
    +
    +

    The main difference after refactoring from mountHost() is that we now keep this.node and this.renderedChildren associated with the internal DOM component instance. We will also use them for applying non-destructive updates in the future.

    + +

    As a result, each internal instance, composite or host, now points to its child internal instances. To help visualize this, if a functional <App> component renders a <Button> class component, and Button class renders a <div>, the internal instance tree would look like this:

    +
    [object CompositeComponent] {
    +  currentElement: <App />,
    +  publicInstance: null,
    +  renderedComponent: [object CompositeComponent] {
    +    currentElement: <Button />,
    +    publicInstance: [object Button],
    +    renderedComponent: [object DOMComponent] {
    +      currentElement: <div />,
    +      node: [object HTMLDivElement],
    +      renderedChildren: []
    +    }
    +  }
    +}
    +
    +

    In the DOM you would only see the <div>. However the internal instance tree contains both composite and host internal instances.

    + +

    The composite internal instances need to store:

    + +
      +
    • The current element.
    • +
    • The public instance if element type is a class.
    • +
    • The single rendered internal instance. It can be either a DOMComponent or a CompositeComponent.
    • +
    + +

    The host internal instances need to store:

    + +
      +
    • The current element.
    • +
    • The DOM node.
    • +
    • All the child internal instances. Each of them can be either a DOMComponent or a CompositeComponent.
    • +
    + +

    If you're struggling to imagine what how an internal instance tree is structured in more complex applications, React DevTools can give you a close approximation, as it highlights host instances with grey, and composite instances with purple:

    + +

    React DevTools tree

    + +

    To complete this refactoring, we will introduce a function that mounts a complete tree into a container node, just like ReactDOM.render(). It returns a public instance, also like ReactDOM.render():

    +
    function mountTree(element, containerNode) {
    +  // Create the top-level internal instance
    +  var rootComponent = instantiateComponent(element);
    +
    +  // Mount the top-level component into the container
    +  var node = rootComponent.mount();
    +  containerNode.appendChild(node);
    +
    +  // Return the public instance it provides
    +  var publicInstance = rootComponent.getPublicInstance();
    +  return publicInstance;
    +}
    +
    +var rootEl = document.getElementById('root');
    +mountTree(<App />, rootEl);
    +

    Unmounting #

    +

    Now that we have internal instances that hold onto their children and the DOM nodes, we can implement unmounting. For a composite component, unmounting calls a lifecycle hook and recurses.

    +
    class CompositeComponent {
    +
    +  // ...
    +
    +  unmount() {
    +    // Call the lifecycle hook if necessary
    +    var publicInstance = this.publicInstance;
    +    if (publicInstance) {
    +      if (publicInstance.componentWillUnmount) {
    +        publicInstance.componentWillUnmount();
    +      }
    +    }
    +
    +    // Unmount the single rendered component
    +    var renderedComponent = this.renderedComponent;
    +    renderedComponent.unmount();
    +  }
    +}
    +
    +

    For DOMComponent, unmounting tells each child to unmount:

    +
    class DOMComponent {
    +
    +  // ...
    +
    +  unmount() {
    +    // Unmount all the children
    +    var renderedChildren = this.renderedChildren;
    +    renderedChildren.forEach(child => child.unmount());
    +  }
    +}
    +
    +

    In practice, unmounting DOM components also removes the event listeners and clears some caches, but we will skip those details.

    + +

    We can now add a new top-level function called unmountTree(containerNode) that is similar to ReactDOM.unmountComponentAtNode():

    +
    function unmountTree(containerNode) {
    +  // Read the internal instance from a DOM node:
    +  // (This doesn't work yet, we will need to change mountTree() to store it.)
    +  var node = containerNode.firstChild;
    +  var rootComponent = node._internalInstance;
    +
    +  // Unmount the tree and clear the container
    +  rootComponent.unmount();
    +  containerNode.innerHTML = '';
    +}
    +
    +

    In order for this to work, we need to read an internal root instance from a DOM node. We will modify mountTree() to add the _internalInstance property to the root DOM node. We will also teach mountTree() to destroy any existing tree so it can be called multiple times:

    +
    function mountTree(element, containerNode) {
    +  // Destroy any existing tree
    +  if (containerNode.firstChild) {
    +    unmountTree(containerNode);
    +  }
    +
    +  // Create the top-level internal instance
    +  var rootComponent = instantiateComponent(element);
    +
    +  // Mount the top-level component into the container
    +  var node = rootComponent.mount();
    +  containerNode.appendChild(node);
    +
    +  // Save a reference to the internal instance
    +  node._internalInstance = rootComponent;
    +
    +  // Return the public instance it provides
    +  var publicInstance = rootComponent.getPublicInstance();
    +  return publicInstance;
    +}
    +
    +

    Now, running unmountTree(), or running mountTree() repeatedly, removes the old tree and runs the componentWillUnmount() lifecycle hook on components.

    +

    Updating #

    +

    In the previous section, we implemented unmounting. However React wouldn't be very useful if each prop change unmounted and mounted the whole tree. The goal of the reconciler is to reuse existing instances where possible to preserve the DOM and the state:

    +
    var rootEl = document.getElementById('root');
    +
    +mountTree(<App />, rootEl);
    +// Should reuse the existing DOM:
    +mountTree(<App />, rootEl);
    +
    +

    We will extend our internal instance contract with one more method. In addition to mount() and unmount(), both DOMComponent and CompositeComponent will implement a new method called receive(nextElement):

    +
    class CompositeComponent {
    +  // ...
    +
    +  receive(nextElement) {
    +    // ...
    +  }
    +}
    +
    +class DOMComponent {
    +  // ...
    +
    +  receive(nextElement) {
    +    // ...
    +  }
    +}
    +
    +

    Its job is to do whatever is necessary to bring the component (and any of its children) up to date with the description provided by the nextElement.

    + +

    This is the part that is often described as "virtual DOM diffing" although what really happens is that we walk the internal tree recursively and let each internal instance receive an update.

    +

    Updating Composite Components #

    +

    When a composite component receives a new element, we run the componentWillUpdate() lifecycle hook.

    + +

    Then we re-render the component with the new props, and get the next rendered element:

    +
    class CompositeComponent {
    +
    +  // ...
    +
    +  receive(nextElement) {
    +    var prevProps = this.currentElement.props;
    +    var publicInstance = this.publicInstance;
    +    var prevRenderedComponent = this.renderedComponent;
    +    var prevRenderedElement = prevRenderedComponent.currentElement;
    +
    +    // Update *own* element
    +    this.currentElement = nextElement;
    +    var type = nextElement.type;
    +    var nextProps = nextElement.props;
    +
    +    // Figure out what the next render() output is
    +    var nextRenderedElement;
    +    if (isClass(type)) {
    +      // Component class
    +      // Call the lifecycle if necessary
    +      if (publicInstance.componentWillUpdate) {
    +        publicInstance.componentWillUpdate(prevProps);
    +      }
    +      // Update the props
    +      publicInstance.props = nextProps;
    +      // Re-render
    +      nextRenderedElement = publicInstance.render();
    +    } else if (typeof type === 'function') {
    +      // Component function
    +      nextRenderedElement = type(nextProps);
    +    }
    +
    +    // ...
    +
    +

    Next, we can look at the rendered element's type. If the type has not changed since the last render, the component below can also be updated in place.

    + +

    For example, if it returned <Button color="red" /> the first time, and <Button color="blue" /> the second time, we can just tell the corresponding internal instance to receive() the next element:

    +
        // ...
    +
    +    // If the rendered element type has not changed,
    +    // reuse the existing component instance and exit.
    +    if (prevRenderedElement.type === nextRenderedElement.type) {
    +      prevRenderedComponent.receive(nextRenderedElement);
    +      return;
    +    }
    +
    +    // ...
    +
    +

    However, if the next rendered element has a different type than the previously rendered element, we can't update the internal instance. A <button> can't "become" an <input>.

    + +

    Instead, we have to unmount the existing internal instance and mount the new one corresponding to the rendered element type. For example, this is what happens when a component that previously rendered a <button /> renders an <input />:

    +
        // ...
    +
    +    // If we reached this point, we need to unmount the previously
    +    // mounted component, mount the new one, and swap their nodes.
    +
    +    // Find the old node because it will need to be replaced
    +    var prevNode = prevRenderedComponent.getHostNode();
    +
    +    // Unmount the old child and mount a new child
    +    prevRenderedComponent.unmount();
    +    var nextRenderedComponent = instantiateComponent(nextRenderedElement);
    +    var nextNode = renderedComponent.mount();
    +
    +    // Replace the reference to the child
    +    this.renderedComponent = renderedComponent;
    +
    +    // Replace the old node with the new one
    +    // Note: this is renderer-specific code and
    +    // ideally should live outside of CompositeComponent:
    +    prevNode.parentNode.replaceChild(prevNode, nextNode);
    +  }
    +}
    +
    +

    To sum this up, when a composite component receives a new element, it may either delegate the update to its rendered internal instance, or unmount it and mount a new one in its place.

    + +

    There is another condition under which a component will re-mount rather than receive an element, and that is when the element's key has changed. We don't discuss key handling in this document because it adds more complexity to an already complex tutorial.

    + +

    Note that we needed to add a method called getHostNode() to the internal instance contract so that it's possible to locate the platform-specific node and replace it during the update. Its implementation is straightforward for both classes:

    +
    class CompositeComponent {
    +  // ...
    +
    +  getHostNode() {
    +    // Ask the rendered component to provide it.
    +    // This will recursively drill down any composites.
    +    return this.renderedComponent.getHostNode();
    +  }
    +}
    +
    +class DOMComponent {
    +  // ...
    +
    +  getHostNode() {
    +    return this.node;
    +  }  
    +}
    +

    Updating Host Components #

    +

    Host component implementations, such as DOMComponent, update differently. When they receive an element, they need to update the underlying platform-specific view. In case of React DOM, this means updating the DOM attributes:

    +
    class DOMComponent {
    +  // ...
    +
    +  receive(nextElement) {
    +    var node = this.node;
    +    var prevElement = this.currentElement;
    +    var prevProps = prevElement.props;
    +    var nextProps = nextElement.props;    
    +    this.currentElement = nextElement;
    +
    +    // Remove old attributes.
    +    Object.keys(prevProps).forEach(propName => {
    +      if (propName !== 'children' && !nextProps.hasOwnProperty(propName)) {
    +        node.removeAttribute(propName);
    +      }
    +    });
    +    // Set next attributes.
    +    Object.keys(nextProps).forEach(propName => {
    +      if (propName !== 'children') {
    +        node.setAttribute(propName, nextProps[propName]);
    +      }
    +    });
    +
    +    // ...
    +
    +

    Then, host components need to update their children. Unlike composite components, they might contain more than a single child.

    + +

    In this simplified example, we use an array of internal instances and iterate over it, either updating or replacing the internal instances depending on whether the received type matches their previous type. The real reconciler also takes element's key in the account and track moves in addition to insertions and deletions, but we will omit this logic.

    + +

    We collect DOM operations on children in a list so we can execute them in batch:

    +
        // ...
    +
    +    // These are arrays of React elements:
    +    var prevChildren = prevProps.children || [];
    +    if (!Array.isArray(prevChildren)) {
    +      prevChildren = [prevChildren];
    +    }
    +    var nextChildren = nextProps.children || [];
    +    if (!Array.isArray(nextChildren)) {
    +      nextChildren = [nextChildren];
    +    }
    +    // These are arrays of internal instances:
    +    var prevRenderedChildren = this.renderedChildren;
    +    var nextRenderedChildren = [];
    +
    +    // As we iterate over children, we will add operations to the array.
    +    var operationQueue = [];
    +
    +    // Note: the section below is extremely simplified!
    +    // It doesn't handle reorders, children with holes, or keys.
    +    // It only exists to illustrate the overall flow, not the specifics.
    +
    +    for (var i = 0; i < nextChildren.length; i++) {
    +      // Try to get an existing internal instance for this child
    +      var prevChild = prevRenderedChildren[i];
    +
    +      // If there is no internal instance under this index,
    +      // a child has been appended to the end. Create a new
    +      // internal instance, mount it, and use its node.
    +      if (!prevChild) {
    +        var nextChild = instantiateComponent(nextChildren[i]);
    +        var node = nextChild.mount();
    +
    +        // Record that we need to append a node
    +        operationQueue.push({type: 'ADD', node});
    +        nextRenderedChildren.push(nextChild);
    +        continue;
    +      }
    +
    +      // We can only update the instance if its element's type matches.
    +      // For example, <Button size="small" /> can be updated to
    +      // <Button size="large" /> but not to an <App />.
    +      var canUpdate = prevChildren[i].type === nextChildren[i].type;
    +
    +      // If we can't update an existing instance, we have to unmount it
    +      // and mount a new one instead of it.
    +      if (!canUpdate) {
    +        var prevNode = prevChild.node;
    +        prevChild.unmount();
    +
    +        var nextChild = instantiateComponent(nextChildren[i]);
    +        var nextNode = nextChild.mount();
    +
    +        // Record that we need to swap the nodes
    +        operationQueue.push({type: 'REPLACE', prevNode, nextNode});
    +        nextRenderedChildren.push(nextChild);
    +        continue;
    +      }
    +
    +      // If we can update an existing internal instance,
    +      // just let it receive the next element and handle its own update.
    +      prevChild.receive(nextChildren[i]);
    +      nextRenderedChildren.push(prevChild);
    +    }
    +
    +    // Finally, unmount any children that don't exist:
    +    for (var j = nextChildren.length; j < prevChildren.length; j++) {
    +     var prevChild = prevRenderedChildren[j];
    +     var node = prevChild.node;
    +     prevChild.unmount();
    +
    +     // Record that we need to remove the node
    +     operationQueue.push({type: 'REMOVE', node});
    +    }
    +
    +    // Point the list of rendered children to the updated version.
    +    this.renderedChildren = nextRenderedChildren;
    +
    +    // ...
    +
    +

    As the last step, we execute the DOM operations. Again, the real reconciler code is more complex because it also handles moves:

    +
        // ...
    +
    +    // Process the operation queue.
    +    while (operationQueue.length > 0) {
    +      var operation = operationQueue.shift();
    +      switch (operation.type) {
    +      case 'ADD':
    +        this.node.appendChild(operation.node);
    +        break;
    +      case 'REPLACE':
    +        this.node.replaceChild(operation.nextNode, operation.prevNode);
    +        break;
    +      case 'REMOVE':
    +        this.node.removeChild(operation.node);
    +        break;
    +      }
    +    }
    +  }
    +}
    +
    +

    And that is it for updating host components.

    +

    Top-Level Updates #

    +

    Now that both CompositeComponent and DOMComponent implement the receive(nextElement) method, we can change the top-level mountTree() function to use it when the element type is the same as it was the last time:

    +
    function mountTree(element, containerNode) {
    +  // Check for an existing tree
    +  if (containerNode.firstChild) {
    +    var prevNode = containerNode.firstChild;
    +    var prevRootComponent = prevNode._internalInstance;
    +    var prevElement = prevRootComponent.currentElement;
    +
    +    // If we can, reuse the existing root component
    +    if (prevElement.type === element.type) {
    +      prevRootComponent.receive(element);
    +      return;
    +    }
    +
    +    // Otherwise, unmount the existing tree
    +    unmountTree(containerNode);
    +  }
    +
    +  // ...
    +
    +}
    +
    +

    Now calling mountTree() two times with the same type isn't destructive:

    +
    var rootEl = document.getElementById('root');
    +
    +mountTree(<App />, rootEl);
    +// Reuses the existing DOM:
    +mountTree(<App />, rootEl);
    +
    +

    These are the basics of how React works internally.

    +

    What We Left Out #

    +

    This document is simplified compared to the real codebase. There are a few important aspects we didn't address:

    + +
      +
    • Components can render null, and the reconciler can handle "empty slots" in arrays and rendered output.

    • +
    • The reconciler also reads key from the elements, and uses it to establish which internal instance corresponds to which element in an array. A bulk of complexity in the actual React implementation is related to that.

    • +
    • In addition to composite and host internal instance classes, there are also classes for "text" and "empty" components. They represent text nodes and the "empty slots" you get by rendering null.

    • +
    • Renderers use injection to pass the host internal class to the reconciler. For example, React DOM tells the reconciler to use ReactDOMComponent as the host internal instance implementation.

    • +
    • The logic for updating the list of children is extracted into a mixin called ReactMultiChild which is used by the host internal instance class implementations both in React DOM and React Native.

    • +
    • The reconciler also implements support for setState() in composite components. Multiple updates inside event handlers get batched into a single update.

    • +
    • The reconciler also takes care of attaching and detaching refs to composite components and host nodes.

    • +
    • Lifecycle hooks that are called after the DOM is ready, such as componentDidMount() and componentDidUpdate(), get collected into "callback queues" and are executed in a single batch.

    • +
    • React puts information about the current update into an internal object called "transaction". Transactions are useful for keeping track of the queue of pending lifecycle hooks, the current DOM nesting for the warnings, and anything else that is "global" to a specific update. Transactions also ensure React "cleans everything up" after updates. For example, the transaction class provided by React DOM restores the input selection after any update.

    • +
    +

    Jumping into the Code #

    +
      +
    • ReactMount is where the code like mountTree() and unmountTree() from this tutorial lives. It takes care of mounting and unmounting top-level components. ReactNativeMount is its React Native analog.
    • +
    • ReactDOMComponent is the equivalent of DOMComponent in this tutorial. It implements the host component class for React DOM renderer. ReactNativeBaseComponent is its React Native analog.
    • +
    • ReactCompositeComponent is the equivalent of CompositeComponent in this tutorial. It handles calling user-defined components and maintaining their state.
    • +
    • instantiateReactComponent contains the switch that picks the right internal instance class to construct for an element. It is equivalent to instantiateComponent() in this tutorial.

    • +
    • ReactReconciler is a wrapper with mountComponent, receiveComponent(), and unmountComponent() methods. It calls the underlying implementations on the internal instances, but also includes some code around them that is shared by all internal instance implementations.

    • +
    • ReactChildReconciler implements the logic for mounting, updating, and unmounting children according to the key of their elements.

    • +
    • ReactMultiChild implements processing the operation queue for child insertions, deletions, and moves independently of the renderer.

    • +
    • mount(), receive(), and unmount() are really called mountComponent(), receiveComponent(), and unmountComponent() in React codebase for legacy reasons, but they receive elements.

    • +
    • Properties on the internal instances start with an underscore, e.g. _currentElement. They are considered to be read-only public fields throughout the codebase.

    • +
    +

    Future Directions #

    +

    Stack reconciler has inherent limitations such as being synchronous and unable to interrupt the work or split it in chunks. There is a work in progress on the new Fiber reconciler with a completely different architecture. In the future, we intend to replace stack reconciler with it, but at the moment it is far from feature parity.

    +

    Next Steps #

    +

    Read the next section to learn about the guiding principles we use for React development.

    + + +
    + + ← Prev + + + Next → + +
    +
    +
    + + +
    +
    + A Facebook & Instagram collaboration.
    + Acknowledgements +
    +
    + © 2013–2016 Facebook Inc.
    + Documentation licensed under CC BY 4.0. +
    +
    +
    +
    + + + + diff --git a/docs/addons-it-IT.html b/docs/addons-it-IT.html index 76eb17ea6e..f6d3513496 100644 --- a/docs/addons-it-IT.html +++ b/docs/addons-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/addons-ja-JP.html b/docs/addons-ja-JP.html index a10c80b422..f719d52482 100644 --- a/docs/addons-ja-JP.html +++ b/docs/addons-ja-JP.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/addons-ko-KR.html b/docs/addons-ko-KR.html index 0c4625a4e6..f41240c3cc 100644 --- a/docs/addons-ko-KR.html +++ b/docs/addons-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/addons-zh-CN.html b/docs/addons-zh-CN.html index 0a0a4a19be..0cc25eb2ce 100644 --- a/docs/addons-zh-CN.html +++ b/docs/addons-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/addons.html b/docs/addons.html index a11e94a991..5b0ce9eee9 100644 --- a/docs/addons.html +++ b/docs/addons.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/advanced-performance-it-IT.html b/docs/advanced-performance-it-IT.html index 2660f90ca5..9c8cf18c50 100644 --- a/docs/advanced-performance-it-IT.html +++ b/docs/advanced-performance-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/advanced-performance-ja-JP.html b/docs/advanced-performance-ja-JP.html index 5f7bd67ad6..adca0d620e 100644 --- a/docs/advanced-performance-ja-JP.html +++ b/docs/advanced-performance-ja-JP.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/advanced-performance-ko-KR.html b/docs/advanced-performance-ko-KR.html index 9c7410dc68..f005de57c5 100644 --- a/docs/advanced-performance-ko-KR.html +++ b/docs/advanced-performance-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/advanced-performance-zh-CN.html b/docs/advanced-performance-zh-CN.html index 98f003df6c..d3ae106119 100644 --- a/docs/advanced-performance-zh-CN.html +++ b/docs/advanced-performance-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/advanced-performance.html b/docs/advanced-performance.html index 89f6ff01b1..797bb040ff 100644 --- a/docs/advanced-performance.html +++ b/docs/advanced-performance.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/animation-it-IT.html b/docs/animation-it-IT.html index 2b1761599f..5b1811cecc 100644 --- a/docs/animation-it-IT.html +++ b/docs/animation-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/animation-ja-JP.html b/docs/animation-ja-JP.html index 23a9769774..afd1782c6f 100644 --- a/docs/animation-ja-JP.html +++ b/docs/animation-ja-JP.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/animation-ko-KR.html b/docs/animation-ko-KR.html index 427fed1b99..4308f24f87 100644 --- a/docs/animation-ko-KR.html +++ b/docs/animation-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/animation-zh-CN.html b/docs/animation-zh-CN.html index eba93a4dec..0bd67a3fb5 100644 --- a/docs/animation-zh-CN.html +++ b/docs/animation-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/animation.html b/docs/animation.html index b2b819e49b..e6239e8d7b 100644 --- a/docs/animation.html +++ b/docs/animation.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/class-name-manipulation-it-IT.html b/docs/class-name-manipulation-it-IT.html index 1f0cd5593a..94ecf98b38 100644 --- a/docs/class-name-manipulation-it-IT.html +++ b/docs/class-name-manipulation-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/class-name-manipulation-ja-JP.html b/docs/class-name-manipulation-ja-JP.html index fa05f524c4..e45c496705 100644 --- a/docs/class-name-manipulation-ja-JP.html +++ b/docs/class-name-manipulation-ja-JP.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/class-name-manipulation-ko-KR.html b/docs/class-name-manipulation-ko-KR.html index 292d8dce14..ea6c4ae825 100644 --- a/docs/class-name-manipulation-ko-KR.html +++ b/docs/class-name-manipulation-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/class-name-manipulation-zh-CN.html b/docs/class-name-manipulation-zh-CN.html index 835b20a7a7..dcf66fae33 100644 --- a/docs/class-name-manipulation-zh-CN.html +++ b/docs/class-name-manipulation-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/class-name-manipulation.html b/docs/class-name-manipulation.html index 1bcd07724c..5a4733d427 100644 --- a/docs/class-name-manipulation.html +++ b/docs/class-name-manipulation.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/clone-with-props-it-IT.html b/docs/clone-with-props-it-IT.html index f7e833403e..4dba8f7b88 100644 --- a/docs/clone-with-props-it-IT.html +++ b/docs/clone-with-props-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/clone-with-props-ja-JP.html b/docs/clone-with-props-ja-JP.html index 685fe0d652..58d61cea6f 100644 --- a/docs/clone-with-props-ja-JP.html +++ b/docs/clone-with-props-ja-JP.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/clone-with-props-ko-KR.html b/docs/clone-with-props-ko-KR.html index 62cf6cc0d2..dfe4f23b26 100644 --- a/docs/clone-with-props-ko-KR.html +++ b/docs/clone-with-props-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/clone-with-props-zh-CN.html b/docs/clone-with-props-zh-CN.html index 91d98dde00..7a68a92a8b 100644 --- a/docs/clone-with-props-zh-CN.html +++ b/docs/clone-with-props-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/clone-with-props.html b/docs/clone-with-props.html index 1f659ffb56..dfaa018518 100644 --- a/docs/clone-with-props.html +++ b/docs/clone-with-props.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/component-api-it-IT.html b/docs/component-api-it-IT.html index 2209272d97..151bc3f33e 100644 --- a/docs/component-api-it-IT.html +++ b/docs/component-api-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/component-api-ko-KR.html b/docs/component-api-ko-KR.html index c1e1e84b6a..dea8f6475d 100644 --- a/docs/component-api-ko-KR.html +++ b/docs/component-api-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/component-api-zh-CN.html b/docs/component-api-zh-CN.html index ece288a27a..788617d65e 100644 --- a/docs/component-api-zh-CN.html +++ b/docs/component-api-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/component-api.html b/docs/component-api.html index 7817ca25c7..d42971ba50 100644 --- a/docs/component-api.html +++ b/docs/component-api.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/component-specs-it-IT.html b/docs/component-specs-it-IT.html index 696bd1dc51..0d7e5e2cd5 100644 --- a/docs/component-specs-it-IT.html +++ b/docs/component-specs-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/component-specs-ko-KR.html b/docs/component-specs-ko-KR.html index c6697a04c4..480b75a956 100644 --- a/docs/component-specs-ko-KR.html +++ b/docs/component-specs-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/component-specs-zh-CN.html b/docs/component-specs-zh-CN.html index 9bbe87bb77..70954878c1 100644 --- a/docs/component-specs-zh-CN.html +++ b/docs/component-specs-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/component-specs.html b/docs/component-specs.html index 5f13a8acd7..23c9a4ea43 100644 --- a/docs/component-specs.html +++ b/docs/component-specs.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/conferences-it-IT.html b/docs/conferences-it-IT.html index 9edc6f5a3d..88a8a3695e 100644 --- a/docs/conferences-it-IT.html +++ b/docs/conferences-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/conferences-ko-KR.html b/docs/conferences-ko-KR.html index 35a28a4d8e..53ced0c29f 100644 --- a/docs/conferences-ko-KR.html +++ b/docs/conferences-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/conferences-zh-CN.html b/docs/conferences-zh-CN.html index e8668b0298..0539991be9 100644 --- a/docs/conferences-zh-CN.html +++ b/docs/conferences-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/conferences.html b/docs/conferences.html index 8975f88770..de9fc8bdac 100644 --- a/docs/conferences.html +++ b/docs/conferences.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/context-ko-KR.html b/docs/context-ko-KR.html index f42a2290bd..ef478bf8b9 100644 --- a/docs/context-ko-KR.html +++ b/docs/context-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/context-zh-CN.html b/docs/context-zh-CN.html index 27c3ac6bd4..c2d487918d 100644 --- a/docs/context-zh-CN.html +++ b/docs/context-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/context.html b/docs/context.html index 07b7ef5b43..56964562e7 100644 --- a/docs/context.html +++ b/docs/context.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/create-fragment-it-IT.html b/docs/create-fragment-it-IT.html index 87225ac8e8..c2717a8678 100644 --- a/docs/create-fragment-it-IT.html +++ b/docs/create-fragment-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/create-fragment-ja-JP.html b/docs/create-fragment-ja-JP.html index 65cd63d55e..44d45b5541 100644 --- a/docs/create-fragment-ja-JP.html +++ b/docs/create-fragment-ja-JP.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/create-fragment-ko-KR.html b/docs/create-fragment-ko-KR.html index f2991086cb..df11a5361d 100644 --- a/docs/create-fragment-ko-KR.html +++ b/docs/create-fragment-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/create-fragment-zh-CN.html b/docs/create-fragment-zh-CN.html index c4355fd36a..3016ae1719 100644 --- a/docs/create-fragment-zh-CN.html +++ b/docs/create-fragment-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/create-fragment.html b/docs/create-fragment.html index 4cef1763f6..e2bc07d7e5 100644 --- a/docs/create-fragment.html +++ b/docs/create-fragment.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/displaying-data-it-IT.html b/docs/displaying-data-it-IT.html index b02a7bbda1..4f12d51697 100644 --- a/docs/displaying-data-it-IT.html +++ b/docs/displaying-data-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/displaying-data-ja-JP.html b/docs/displaying-data-ja-JP.html index 40fc8b411d..ba71c56195 100644 --- a/docs/displaying-data-ja-JP.html +++ b/docs/displaying-data-ja-JP.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/displaying-data-ko-KR.html b/docs/displaying-data-ko-KR.html index 9e8d86e2d3..d14f4b3b98 100644 --- a/docs/displaying-data-ko-KR.html +++ b/docs/displaying-data-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/displaying-data-ru-RU.html b/docs/displaying-data-ru-RU.html index df4e2be57e..e9595ccb8f 100644 --- a/docs/displaying-data-ru-RU.html +++ b/docs/displaying-data-ru-RU.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/displaying-data-zh-CN.html b/docs/displaying-data-zh-CN.html index 15a54e671c..5fc501416b 100644 --- a/docs/displaying-data-zh-CN.html +++ b/docs/displaying-data-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/displaying-data-zh-TW.html b/docs/displaying-data-zh-TW.html index 9aecbce57d..a8624a7003 100644 --- a/docs/displaying-data-zh-TW.html +++ b/docs/displaying-data-zh-TW.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/displaying-data.html b/docs/displaying-data.html index fb76a9a4a4..c4a639c6c8 100644 --- a/docs/displaying-data.html +++ b/docs/displaying-data.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/dom-differences-it-IT.html b/docs/dom-differences-it-IT.html index 570dff79fa..2c77080dda 100644 --- a/docs/dom-differences-it-IT.html +++ b/docs/dom-differences-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/dom-differences-ko-KR.html b/docs/dom-differences-ko-KR.html index f11295034c..c0b8a7a90a 100644 --- a/docs/dom-differences-ko-KR.html +++ b/docs/dom-differences-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/dom-differences-zh-CN.html b/docs/dom-differences-zh-CN.html index 582312ae4c..c615b86fae 100644 --- a/docs/dom-differences-zh-CN.html +++ b/docs/dom-differences-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/dom-differences.html b/docs/dom-differences.html index b9a0a82921..e39e9a461c 100644 --- a/docs/dom-differences.html +++ b/docs/dom-differences.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/environments.html b/docs/environments.html index 3a8e2083c2..7ab6425ec4 100644 --- a/docs/environments.html +++ b/docs/environments.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/error-decoder.html b/docs/error-decoder.html index 2fd0e690d2..ffd9b72a65 100644 --- a/docs/error-decoder.html +++ b/docs/error-decoder.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/events-it-IT.html b/docs/events-it-IT.html index 4a74674ac7..55fa192bb5 100644 --- a/docs/events-it-IT.html +++ b/docs/events-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/events-ko-KR.html b/docs/events-ko-KR.html index a7de0cb311..18f63aa3c6 100644 --- a/docs/events-ko-KR.html +++ b/docs/events-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/events-zh-CN.html b/docs/events-zh-CN.html index 8eee722497..b047fc9bfb 100644 --- a/docs/events-zh-CN.html +++ b/docs/events-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/events.html b/docs/events.html index 6ccd7ba2c1..83f074a292 100644 --- a/docs/events.html +++ b/docs/events.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/flux-overview-it-IT.html b/docs/flux-overview-it-IT.html index 9fb2d131b1..3406008518 100644 --- a/docs/flux-overview-it-IT.html +++ b/docs/flux-overview-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/flux-overview-ko-KR.html b/docs/flux-overview-ko-KR.html index dd5d2afe2d..fdcfc6dfef 100644 --- a/docs/flux-overview-ko-KR.html +++ b/docs/flux-overview-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/flux-overview-zh-CN.html b/docs/flux-overview-zh-CN.html index b08f6f1262..c264fa95af 100644 --- a/docs/flux-overview-zh-CN.html +++ b/docs/flux-overview-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/flux-overview.html b/docs/flux-overview.html index dceb0e1fa5..a9b8a545d8 100644 --- a/docs/flux-overview.html +++ b/docs/flux-overview.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/flux-todo-list-it-IT.html b/docs/flux-todo-list-it-IT.html index 12ab671723..660f93bc34 100644 --- a/docs/flux-todo-list-it-IT.html +++ b/docs/flux-todo-list-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/flux-todo-list-ko-KR.html b/docs/flux-todo-list-ko-KR.html index a69c4493f5..acc3dec4c1 100644 --- a/docs/flux-todo-list-ko-KR.html +++ b/docs/flux-todo-list-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/flux-todo-list-zh-CN.html b/docs/flux-todo-list-zh-CN.html index 06aec3482c..8d635c8aff 100644 --- a/docs/flux-todo-list-zh-CN.html +++ b/docs/flux-todo-list-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/flux-todo-list.html b/docs/flux-todo-list.html index c18d6183a2..74403dfa17 100644 --- a/docs/flux-todo-list.html +++ b/docs/flux-todo-list.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/forms-it-IT.html b/docs/forms-it-IT.html index b3d49fe196..bb29e28aab 100644 --- a/docs/forms-it-IT.html +++ b/docs/forms-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/forms-ja-JP.html b/docs/forms-ja-JP.html index e2995b4ac0..8229aec9a2 100644 --- a/docs/forms-ja-JP.html +++ b/docs/forms-ja-JP.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/forms-ko-KR.html b/docs/forms-ko-KR.html index 4d9f3fd789..3177ca41c7 100644 --- a/docs/forms-ko-KR.html +++ b/docs/forms-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/forms-zh-CN.html b/docs/forms-zh-CN.html index 4a19f8a1b9..1c9cfeb779 100644 --- a/docs/forms-zh-CN.html +++ b/docs/forms-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/forms.html b/docs/forms.html index 9f9698b6a6..eeaec11e50 100644 --- a/docs/forms.html +++ b/docs/forms.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/getting-started-it-IT.html b/docs/getting-started-it-IT.html index 9e7f7eeb64..d879cfab36 100644 --- a/docs/getting-started-it-IT.html +++ b/docs/getting-started-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/getting-started-ja-JP.html b/docs/getting-started-ja-JP.html index d869874b05..873a9df3e6 100644 --- a/docs/getting-started-ja-JP.html +++ b/docs/getting-started-ja-JP.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/getting-started-ko-KR.html b/docs/getting-started-ko-KR.html index 094f4817ff..e6053f44d7 100644 --- a/docs/getting-started-ko-KR.html +++ b/docs/getting-started-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/getting-started-zh-CN.html b/docs/getting-started-zh-CN.html index c6d1e85b8d..382a40a686 100644 --- a/docs/getting-started-zh-CN.html +++ b/docs/getting-started-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/getting-started.html b/docs/getting-started.html index b85965e32f..3d57280c70 100644 --- a/docs/getting-started.html +++ b/docs/getting-started.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/glossary-it-IT.html b/docs/glossary-it-IT.html index 0de37dda6d..d5025b8732 100644 --- a/docs/glossary-it-IT.html +++ b/docs/glossary-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/glossary-ko-KR.html b/docs/glossary-ko-KR.html index 603f54a915..a4e7045234 100644 --- a/docs/glossary-ko-KR.html +++ b/docs/glossary-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/glossary-zh-CN.html b/docs/glossary-zh-CN.html index 0cbf0aa22c..04df569804 100644 --- a/docs/glossary-zh-CN.html +++ b/docs/glossary-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/glossary.html b/docs/glossary.html index 3068aab8bc..d69daef8d4 100644 --- a/docs/glossary.html +++ b/docs/glossary.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/interactivity-and-dynamic-uis-it-IT.html b/docs/interactivity-and-dynamic-uis-it-IT.html index e82ea0caf3..1fe5e6e677 100644 --- a/docs/interactivity-and-dynamic-uis-it-IT.html +++ b/docs/interactivity-and-dynamic-uis-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/interactivity-and-dynamic-uis-ja-JP.html b/docs/interactivity-and-dynamic-uis-ja-JP.html index c573e5523c..ac99882f39 100644 --- a/docs/interactivity-and-dynamic-uis-ja-JP.html +++ b/docs/interactivity-and-dynamic-uis-ja-JP.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/interactivity-and-dynamic-uis-ko-KR.html b/docs/interactivity-and-dynamic-uis-ko-KR.html index 2f11d94441..368ec4f5df 100644 --- a/docs/interactivity-and-dynamic-uis-ko-KR.html +++ b/docs/interactivity-and-dynamic-uis-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/interactivity-and-dynamic-uis-ru-RU.html b/docs/interactivity-and-dynamic-uis-ru-RU.html index a641db2939..949b1ba465 100644 --- a/docs/interactivity-and-dynamic-uis-ru-RU.html +++ b/docs/interactivity-and-dynamic-uis-ru-RU.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/interactivity-and-dynamic-uis-zh-CN.html b/docs/interactivity-and-dynamic-uis-zh-CN.html index 77ac0783f2..8ecc610f31 100644 --- a/docs/interactivity-and-dynamic-uis-zh-CN.html +++ b/docs/interactivity-and-dynamic-uis-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/interactivity-and-dynamic-uis.html b/docs/interactivity-and-dynamic-uis.html index 5b7e1b9ef9..fcd80ba69d 100644 --- a/docs/interactivity-and-dynamic-uis.html +++ b/docs/interactivity-and-dynamic-uis.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/jsx-gotchas-it-IT.html b/docs/jsx-gotchas-it-IT.html index 4783a2a96d..ddf6478e2f 100644 --- a/docs/jsx-gotchas-it-IT.html +++ b/docs/jsx-gotchas-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/jsx-gotchas-ja-JP.html b/docs/jsx-gotchas-ja-JP.html index 45d882e481..019a018077 100644 --- a/docs/jsx-gotchas-ja-JP.html +++ b/docs/jsx-gotchas-ja-JP.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/jsx-gotchas-ko-KR.html b/docs/jsx-gotchas-ko-KR.html index 70d3c42f1e..0f2902fdab 100644 --- a/docs/jsx-gotchas-ko-KR.html +++ b/docs/jsx-gotchas-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/jsx-gotchas-zh-CN.html b/docs/jsx-gotchas-zh-CN.html index 16de94d622..0bf968a319 100644 --- a/docs/jsx-gotchas-zh-CN.html +++ b/docs/jsx-gotchas-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/jsx-gotchas.html b/docs/jsx-gotchas.html index 01f347b360..e6e5dc1f9d 100644 --- a/docs/jsx-gotchas.html +++ b/docs/jsx-gotchas.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/jsx-in-depth-it-IT.html b/docs/jsx-in-depth-it-IT.html index 0488fc3f8b..f588472ed8 100644 --- a/docs/jsx-in-depth-it-IT.html +++ b/docs/jsx-in-depth-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/jsx-in-depth-ja-JP.html b/docs/jsx-in-depth-ja-JP.html index be040e5dc5..59a4c22124 100644 --- a/docs/jsx-in-depth-ja-JP.html +++ b/docs/jsx-in-depth-ja-JP.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/jsx-in-depth-ko-KR.html b/docs/jsx-in-depth-ko-KR.html index e3bd8355b9..ded3df1f79 100644 --- a/docs/jsx-in-depth-ko-KR.html +++ b/docs/jsx-in-depth-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/jsx-in-depth-zh-CN.html b/docs/jsx-in-depth-zh-CN.html index 9e086fa67d..f2ca8a8b64 100644 --- a/docs/jsx-in-depth-zh-CN.html +++ b/docs/jsx-in-depth-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/jsx-in-depth.html b/docs/jsx-in-depth.html index eb5bd3f2cc..0729362761 100644 --- a/docs/jsx-in-depth.html +++ b/docs/jsx-in-depth.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/jsx-spread-it-IT.html b/docs/jsx-spread-it-IT.html index f97e6a87ab..688c920448 100644 --- a/docs/jsx-spread-it-IT.html +++ b/docs/jsx-spread-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/jsx-spread-ja-JP.html b/docs/jsx-spread-ja-JP.html index dfca7504a6..3c190b6f9d 100644 --- a/docs/jsx-spread-ja-JP.html +++ b/docs/jsx-spread-ja-JP.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/jsx-spread-ko-KR.html b/docs/jsx-spread-ko-KR.html index e6e9dd3783..ea9a3163d4 100644 --- a/docs/jsx-spread-ko-KR.html +++ b/docs/jsx-spread-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/jsx-spread-zh-CN.html b/docs/jsx-spread-zh-CN.html index ceba0a33d5..07438dfac5 100644 --- a/docs/jsx-spread-zh-CN.html +++ b/docs/jsx-spread-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/jsx-spread.html b/docs/jsx-spread.html index e6bbc855ab..2eb8f20232 100644 --- a/docs/jsx-spread.html +++ b/docs/jsx-spread.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/language-tooling.html b/docs/language-tooling.html index fabc88e6c3..32109c926a 100644 --- a/docs/language-tooling.html +++ b/docs/language-tooling.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/more-about-refs-it-IT.html b/docs/more-about-refs-it-IT.html index 5b58b43dbc..46734683c3 100644 --- a/docs/more-about-refs-it-IT.html +++ b/docs/more-about-refs-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/more-about-refs-ja-JP.html b/docs/more-about-refs-ja-JP.html index 184db02fc8..b03c051d42 100644 --- a/docs/more-about-refs-ja-JP.html +++ b/docs/more-about-refs-ja-JP.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/more-about-refs-ko-KR.html b/docs/more-about-refs-ko-KR.html index 63dd0640cc..afdc902f83 100644 --- a/docs/more-about-refs-ko-KR.html +++ b/docs/more-about-refs-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/more-about-refs-zh-CN.html b/docs/more-about-refs-zh-CN.html index 8aa714602d..7244e0726c 100644 --- a/docs/more-about-refs-zh-CN.html +++ b/docs/more-about-refs-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/more-about-refs.html b/docs/more-about-refs.html index 22f7f36e57..2110484c75 100644 --- a/docs/more-about-refs.html +++ b/docs/more-about-refs.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/multiple-components-it-IT.html b/docs/multiple-components-it-IT.html index ee7b4f8e9a..b6c358ead1 100644 --- a/docs/multiple-components-it-IT.html +++ b/docs/multiple-components-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/multiple-components-ja-JP.html b/docs/multiple-components-ja-JP.html index ebf9fb382d..58643b852c 100644 --- a/docs/multiple-components-ja-JP.html +++ b/docs/multiple-components-ja-JP.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/multiple-components-ko-KR.html b/docs/multiple-components-ko-KR.html index cf53e5bcad..f6175a1860 100644 --- a/docs/multiple-components-ko-KR.html +++ b/docs/multiple-components-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/multiple-components-zh-CN.html b/docs/multiple-components-zh-CN.html index a06d1d2c4e..53c3304224 100644 --- a/docs/multiple-components-zh-CN.html +++ b/docs/multiple-components-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/multiple-components.html b/docs/multiple-components.html index d8df7e0f06..d97bc0b70c 100644 --- a/docs/multiple-components.html +++ b/docs/multiple-components.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/package-management.html b/docs/package-management.html index b7ffb43401..b138cf3ade 100644 --- a/docs/package-management.html +++ b/docs/package-management.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/perf-it-IT.html b/docs/perf-it-IT.html index 85e99a269d..c0a7e8c575 100644 --- a/docs/perf-it-IT.html +++ b/docs/perf-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/perf-ja-JP.html b/docs/perf-ja-JP.html index b1fef4d762..932d151d59 100644 --- a/docs/perf-ja-JP.html +++ b/docs/perf-ja-JP.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/perf-ko-KR.html b/docs/perf-ko-KR.html index b0b6877481..357c292a3e 100644 --- a/docs/perf-ko-KR.html +++ b/docs/perf-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/perf-zh-CN.html b/docs/perf-zh-CN.html index ea2ed15606..727dbfb1e0 100644 --- a/docs/perf-zh-CN.html +++ b/docs/perf-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/perf.html b/docs/perf.html index ffd33b2f8a..7bbc70a166 100644 --- a/docs/perf.html +++ b/docs/perf.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/pure-render-mixin-it-IT.html b/docs/pure-render-mixin-it-IT.html index 35ec024c24..d33f82fe9f 100644 --- a/docs/pure-render-mixin-it-IT.html +++ b/docs/pure-render-mixin-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/pure-render-mixin-ja-JP.html b/docs/pure-render-mixin-ja-JP.html index b07a654eb1..2cffc78cdc 100644 --- a/docs/pure-render-mixin-ja-JP.html +++ b/docs/pure-render-mixin-ja-JP.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/pure-render-mixin-ko-KR.html b/docs/pure-render-mixin-ko-KR.html index 6fc1860b77..b17330a664 100644 --- a/docs/pure-render-mixin-ko-KR.html +++ b/docs/pure-render-mixin-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/pure-render-mixin-zh-CN.html b/docs/pure-render-mixin-zh-CN.html index f96dc13e23..ca6e58714d 100644 --- a/docs/pure-render-mixin-zh-CN.html +++ b/docs/pure-render-mixin-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/pure-render-mixin.html b/docs/pure-render-mixin.html index 7b74434b58..d126a78de3 100644 --- a/docs/pure-render-mixin.html +++ b/docs/pure-render-mixin.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/reconciliation-it-IT.html b/docs/reconciliation-it-IT.html index f582ca6321..503e229f3e 100644 --- a/docs/reconciliation-it-IT.html +++ b/docs/reconciliation-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/reconciliation-ko-KR.html b/docs/reconciliation-ko-KR.html index b13fae9d68..b01c4be6d3 100644 --- a/docs/reconciliation-ko-KR.html +++ b/docs/reconciliation-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/reconciliation.html b/docs/reconciliation.html index 9b2e711d39..70b8da1bf0 100644 --- a/docs/reconciliation.html +++ b/docs/reconciliation.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/reusable-components-it-IT.html b/docs/reusable-components-it-IT.html index 21209f209b..c97fa86364 100644 --- a/docs/reusable-components-it-IT.html +++ b/docs/reusable-components-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/reusable-components-ja-JP.html b/docs/reusable-components-ja-JP.html index d4810c4734..e9becbb5c7 100644 --- a/docs/reusable-components-ja-JP.html +++ b/docs/reusable-components-ja-JP.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/reusable-components-ko-KR.html b/docs/reusable-components-ko-KR.html index c84ed6c70d..39be466f19 100644 --- a/docs/reusable-components-ko-KR.html +++ b/docs/reusable-components-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/reusable-components-zh-CN.html b/docs/reusable-components-zh-CN.html index 8efe4e62f3..e4ffdbb45a 100644 --- a/docs/reusable-components-zh-CN.html +++ b/docs/reusable-components-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/reusable-components.html b/docs/reusable-components.html index 41cb63e35d..206d53e280 100644 --- a/docs/reusable-components.html +++ b/docs/reusable-components.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/shallow-compare-zh-CN.html b/docs/shallow-compare-zh-CN.html index df0b12db6f..a8bbbbfa98 100644 --- a/docs/shallow-compare-zh-CN.html +++ b/docs/shallow-compare-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/shallow-compare.html b/docs/shallow-compare.html index c7bda663dd..5dd3efd81e 100644 --- a/docs/shallow-compare.html +++ b/docs/shallow-compare.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/special-non-dom-attributes-it-IT.html b/docs/special-non-dom-attributes-it-IT.html index bf21cdee10..0d4a16e46c 100644 --- a/docs/special-non-dom-attributes-it-IT.html +++ b/docs/special-non-dom-attributes-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/special-non-dom-attributes-ko-KR.html b/docs/special-non-dom-attributes-ko-KR.html index 3c1cbeebd1..2405845f9f 100644 --- a/docs/special-non-dom-attributes-ko-KR.html +++ b/docs/special-non-dom-attributes-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/special-non-dom-attributes-zh-CN.html b/docs/special-non-dom-attributes-zh-CN.html index f7a060846e..fc46fea179 100644 --- a/docs/special-non-dom-attributes-zh-CN.html +++ b/docs/special-non-dom-attributes-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/special-non-dom-attributes.html b/docs/special-non-dom-attributes.html index 224eab5278..c248e144b9 100644 --- a/docs/special-non-dom-attributes.html +++ b/docs/special-non-dom-attributes.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/tags-and-attributes-it-IT.html b/docs/tags-and-attributes-it-IT.html index 804b529a3a..70e6a8fed8 100644 --- a/docs/tags-and-attributes-it-IT.html +++ b/docs/tags-and-attributes-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/tags-and-attributes-ko-KR.html b/docs/tags-and-attributes-ko-KR.html index 81ddf9e50b..1cee883cf4 100644 --- a/docs/tags-and-attributes-ko-KR.html +++ b/docs/tags-and-attributes-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/tags-and-attributes-zh-CN.html b/docs/tags-and-attributes-zh-CN.html index f0b25f94c7..da36988238 100644 --- a/docs/tags-and-attributes-zh-CN.html +++ b/docs/tags-and-attributes-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/tags-and-attributes.html b/docs/tags-and-attributes.html index 42a940bcfb..7e276aec66 100644 --- a/docs/tags-and-attributes.html +++ b/docs/tags-and-attributes.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/test-utils-it-IT.html b/docs/test-utils-it-IT.html index b4f83589bb..d76d5c91a4 100644 --- a/docs/test-utils-it-IT.html +++ b/docs/test-utils-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/test-utils-ja-JP.html b/docs/test-utils-ja-JP.html index 6885ad3a85..7feaacf107 100644 --- a/docs/test-utils-ja-JP.html +++ b/docs/test-utils-ja-JP.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/test-utils-ko-KR.html b/docs/test-utils-ko-KR.html index dcfedc57fd..f768e3dcbd 100644 --- a/docs/test-utils-ko-KR.html +++ b/docs/test-utils-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/test-utils-zh-CN.html b/docs/test-utils-zh-CN.html index 061c8893ec..8ec4e7075d 100644 --- a/docs/test-utils-zh-CN.html +++ b/docs/test-utils-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/test-utils.html b/docs/test-utils.html index 6925eb4b2d..50a4710c25 100644 --- a/docs/test-utils.html +++ b/docs/test-utils.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/thinking-in-react-it-IT.html b/docs/thinking-in-react-it-IT.html index d54d27ef37..846dbd56db 100644 --- a/docs/thinking-in-react-it-IT.html +++ b/docs/thinking-in-react-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/thinking-in-react-ja-JP.html b/docs/thinking-in-react-ja-JP.html index d4e5a59fbd..1bec4d46e1 100644 --- a/docs/thinking-in-react-ja-JP.html +++ b/docs/thinking-in-react-ja-JP.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/thinking-in-react-ko-KR.html b/docs/thinking-in-react-ko-KR.html index a82518ab74..2e42151830 100644 --- a/docs/thinking-in-react-ko-KR.html +++ b/docs/thinking-in-react-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/thinking-in-react-zh-CN.html b/docs/thinking-in-react-zh-CN.html index 31bff2d583..c3d32808b2 100644 --- a/docs/thinking-in-react-zh-CN.html +++ b/docs/thinking-in-react-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/thinking-in-react.html b/docs/thinking-in-react.html index 0cd5839c17..8b4f8e198b 100644 --- a/docs/thinking-in-react.html +++ b/docs/thinking-in-react.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/tooling-integration-it-IT.html b/docs/tooling-integration-it-IT.html index 91b8966815..b9dd218ce9 100644 --- a/docs/tooling-integration-it-IT.html +++ b/docs/tooling-integration-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/tooling-integration-ja-JP.html b/docs/tooling-integration-ja-JP.html index c88f3db633..7dcf4d2068 100644 --- a/docs/tooling-integration-ja-JP.html +++ b/docs/tooling-integration-ja-JP.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/tooling-integration-ko-KR.html b/docs/tooling-integration-ko-KR.html index 834720ae1c..e92014852a 100644 --- a/docs/tooling-integration-ko-KR.html +++ b/docs/tooling-integration-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/tooling-integration-zh-CN.html b/docs/tooling-integration-zh-CN.html index fd141cc389..9b6391e636 100644 --- a/docs/tooling-integration-zh-CN.html +++ b/docs/tooling-integration-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/tooling-integration.html b/docs/tooling-integration.html index a1c7529412..ea8be6590e 100644 --- a/docs/tooling-integration.html +++ b/docs/tooling-integration.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/top-level-api-it-IT.html b/docs/top-level-api-it-IT.html index 44eb9ba9f8..3a38aecf14 100644 --- a/docs/top-level-api-it-IT.html +++ b/docs/top-level-api-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/top-level-api-ja-JP.html b/docs/top-level-api-ja-JP.html index b77ab7456d..9be645dff6 100644 --- a/docs/top-level-api-ja-JP.html +++ b/docs/top-level-api-ja-JP.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/top-level-api-ko-KR.html b/docs/top-level-api-ko-KR.html index f1f38231b2..028b80de39 100644 --- a/docs/top-level-api-ko-KR.html +++ b/docs/top-level-api-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/top-level-api-zh-CN.html b/docs/top-level-api-zh-CN.html index dd8a236d3f..e2b8849fab 100644 --- a/docs/top-level-api-zh-CN.html +++ b/docs/top-level-api-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/top-level-api.html b/docs/top-level-api.html index f25b7a1fbc..2bdad6ccb8 100644 --- a/docs/top-level-api.html +++ b/docs/top-level-api.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/transferring-props-it-IT.html b/docs/transferring-props-it-IT.html index a294e7acfa..786301fe9c 100644 --- a/docs/transferring-props-it-IT.html +++ b/docs/transferring-props-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/transferring-props-ja-JP.html b/docs/transferring-props-ja-JP.html index 44bbf6b51a..726bb8067a 100644 --- a/docs/transferring-props-ja-JP.html +++ b/docs/transferring-props-ja-JP.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/transferring-props-ko-KR.html b/docs/transferring-props-ko-KR.html index f52bf97c5e..3c0fed2dc9 100644 --- a/docs/transferring-props-ko-KR.html +++ b/docs/transferring-props-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/transferring-props-zh-CN.html b/docs/transferring-props-zh-CN.html index 04c5da1aa8..32da9b0cd5 100644 --- a/docs/transferring-props-zh-CN.html +++ b/docs/transferring-props-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/transferring-props.html b/docs/transferring-props.html index 95cf4b9c13..8496f562e9 100644 --- a/docs/transferring-props.html +++ b/docs/transferring-props.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/tutorial-it-IT.html b/docs/tutorial-it-IT.html index 5b18c18811..1da620e366 100644 --- a/docs/tutorial-it-IT.html +++ b/docs/tutorial-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/tutorial-ja-JP.html b/docs/tutorial-ja-JP.html index db94bbfb18..a63ea31fd0 100644 --- a/docs/tutorial-ja-JP.html +++ b/docs/tutorial-ja-JP.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/tutorial-ko-KR.html b/docs/tutorial-ko-KR.html index 80e33daef0..c1524be3c5 100644 --- a/docs/tutorial-ko-KR.html +++ b/docs/tutorial-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/tutorial-zh-CN.html b/docs/tutorial-zh-CN.html index 97f35610b2..73bc013686 100644 --- a/docs/tutorial-zh-CN.html +++ b/docs/tutorial-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/tutorial.html b/docs/tutorial.html index 5aa0a78567..b6f8667b46 100644 --- a/docs/tutorial.html +++ b/docs/tutorial.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/two-way-binding-helpers-it-IT.html b/docs/two-way-binding-helpers-it-IT.html index 070329d656..8e32a1a1f9 100644 --- a/docs/two-way-binding-helpers-it-IT.html +++ b/docs/two-way-binding-helpers-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/two-way-binding-helpers-ja-JP.html b/docs/two-way-binding-helpers-ja-JP.html index 066edaa9be..231ebcb2c9 100644 --- a/docs/two-way-binding-helpers-ja-JP.html +++ b/docs/two-way-binding-helpers-ja-JP.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/two-way-binding-helpers-ko-KR.html b/docs/two-way-binding-helpers-ko-KR.html index 736633a5c4..73f649d2aa 100644 --- a/docs/two-way-binding-helpers-ko-KR.html +++ b/docs/two-way-binding-helpers-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/two-way-binding-helpers-zh-CN.html b/docs/two-way-binding-helpers-zh-CN.html index 9b24a9e82b..a57a561668 100644 --- a/docs/two-way-binding-helpers-zh-CN.html +++ b/docs/two-way-binding-helpers-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/two-way-binding-helpers.html b/docs/two-way-binding-helpers.html index 8ed989ca93..0cd5506977 100644 --- a/docs/two-way-binding-helpers.html +++ b/docs/two-way-binding-helpers.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/update-it-IT.html b/docs/update-it-IT.html index 324e5e18a3..56a525c6d9 100644 --- a/docs/update-it-IT.html +++ b/docs/update-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/update-ja-JP.html b/docs/update-ja-JP.html index 58d23c2bd2..eb09edab27 100644 --- a/docs/update-ja-JP.html +++ b/docs/update-ja-JP.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/update-ko-KR.html b/docs/update-ko-KR.html index cd12fabc72..99206d565a 100644 --- a/docs/update-ko-KR.html +++ b/docs/update-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/update-zh-CN.html b/docs/update-zh-CN.html index 45e7cd6f35..392f0357b3 100644 --- a/docs/update-zh-CN.html +++ b/docs/update-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/update.html b/docs/update.html index f0dad5e18d..5a90612eb3 100644 --- a/docs/update.html +++ b/docs/update.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/videos-it-IT.html b/docs/videos-it-IT.html index ec6770a4ef..b63f8bad77 100644 --- a/docs/videos-it-IT.html +++ b/docs/videos-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/videos-ko-KR.html b/docs/videos-ko-KR.html index 3ea079b156..adcd802f74 100644 --- a/docs/videos-ko-KR.html +++ b/docs/videos-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/videos-zh-CN.html b/docs/videos-zh-CN.html index cc60e75475..4dd0063f7b 100644 --- a/docs/videos-zh-CN.html +++ b/docs/videos-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/videos.html b/docs/videos.html index ea214675a6..1790714fcf 100644 --- a/docs/videos.html +++ b/docs/videos.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/webcomponents-zh-CN.html b/docs/webcomponents-zh-CN.html index 5792fc08e0..083ef51559 100644 --- a/docs/webcomponents-zh-CN.html +++ b/docs/webcomponents-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/webcomponents.html b/docs/webcomponents.html index 4bd22a5c78..8515ead7ae 100644 --- a/docs/webcomponents.html +++ b/docs/webcomponents.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/why-react-de-DE.html b/docs/why-react-de-DE.html index 1d80dd4cbf..401847df13 100644 --- a/docs/why-react-de-DE.html +++ b/docs/why-react-de-DE.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/why-react-it-IT.html b/docs/why-react-it-IT.html index 5fe5695ff7..44d65d46f7 100644 --- a/docs/why-react-it-IT.html +++ b/docs/why-react-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/why-react-ja-JP.html b/docs/why-react-ja-JP.html index 91d17ad8e3..471eae6c31 100644 --- a/docs/why-react-ja-JP.html +++ b/docs/why-react-ja-JP.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/why-react-ko-KR.html b/docs/why-react-ko-KR.html index 0e85186ffc..18ef45f4f9 100644 --- a/docs/why-react-ko-KR.html +++ b/docs/why-react-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/why-react-ru-RU.html b/docs/why-react-ru-RU.html index eca0e49549..da1772a5d4 100644 --- a/docs/why-react-ru-RU.html +++ b/docs/why-react-ru-RU.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/why-react-zh-CN.html b/docs/why-react-zh-CN.html index 5b50e17233..9f6e6dba6e 100644 --- a/docs/why-react-zh-CN.html +++ b/docs/why-react-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/why-react-zh-TW.html b/docs/why-react-zh-TW.html index 28134c90bb..dea72e9d0e 100644 --- a/docs/why-react-zh-TW.html +++ b/docs/why-react-zh-TW.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/why-react.html b/docs/why-react.html index c150633847..5d9703ecd7 100644 --- a/docs/why-react.html +++ b/docs/why-react.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/working-with-the-browser-it-IT.html b/docs/working-with-the-browser-it-IT.html index b942ebb020..99f917ac4d 100644 --- a/docs/working-with-the-browser-it-IT.html +++ b/docs/working-with-the-browser-it-IT.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/working-with-the-browser-ja-JP.html b/docs/working-with-the-browser-ja-JP.html index 3d11273c62..4ed0d2cf4a 100644 --- a/docs/working-with-the-browser-ja-JP.html +++ b/docs/working-with-the-browser-ja-JP.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/working-with-the-browser-ko-KR.html b/docs/working-with-the-browser-ko-KR.html index 3ee18ddb98..d4c867ab3e 100644 --- a/docs/working-with-the-browser-ko-KR.html +++ b/docs/working-with-the-browser-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/working-with-the-browser-zh-CN.html b/docs/working-with-the-browser-zh-CN.html index cb6765b16c..020cf341f8 100644 --- a/docs/working-with-the-browser-zh-CN.html +++ b/docs/working-with-the-browser-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/docs/working-with-the-browser.html b/docs/working-with-the-browser.html index b756e8ba89..de5122749e 100644 --- a/docs/working-with-the-browser.html +++ b/docs/working-with-the-browser.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/img/docs/implementation-notes-tree.png b/img/docs/implementation-notes-tree.png new file mode 100644 index 0000000000000000000000000000000000000000..637dcb483792dc5926ee4cfa2f3a181532d5f033 GIT binary patch literal 59918 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 literal 0 HcmV?d00001 diff --git a/tips/children-props-type-ko-KR.html b/tips/children-props-type-ko-KR.html index 402c6d1a42..276d4ae170 100644 --- a/tips/children-props-type-ko-KR.html +++ b/tips/children-props-type-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +

  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/children-props-type.html b/tips/children-props-type.html index cd6d8e93e0..47bfe15d89 100644 --- a/tips/children-props-type.html +++ b/tips/children-props-type.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/children-undefined-ko-KR.html b/tips/children-undefined-ko-KR.html index 342cd4d77c..ce3d1b6a3b 100644 --- a/tips/children-undefined-ko-KR.html +++ b/tips/children-undefined-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/children-undefined.html b/tips/children-undefined.html index ce27e9c6e3..87ed101f38 100644 --- a/tips/children-undefined.html +++ b/tips/children-undefined.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/communicate-between-components-ko-KR.html b/tips/communicate-between-components-ko-KR.html index e48619b66a..dc79b57a10 100644 --- a/tips/communicate-between-components-ko-KR.html +++ b/tips/communicate-between-components-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/communicate-between-components.html b/tips/communicate-between-components.html index 5182279d5b..a280c89099 100644 --- a/tips/communicate-between-components.html +++ b/tips/communicate-between-components.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/componentWillReceiveProps-not-triggered-after-mounting-ko-KR.html b/tips/componentWillReceiveProps-not-triggered-after-mounting-ko-KR.html index 2088677d66..04455e1388 100644 --- a/tips/componentWillReceiveProps-not-triggered-after-mounting-ko-KR.html +++ b/tips/componentWillReceiveProps-not-triggered-after-mounting-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/componentWillReceiveProps-not-triggered-after-mounting.html b/tips/componentWillReceiveProps-not-triggered-after-mounting.html index b454e2bcc0..ae8e590f20 100644 --- a/tips/componentWillReceiveProps-not-triggered-after-mounting.html +++ b/tips/componentWillReceiveProps-not-triggered-after-mounting.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/controlled-input-null-value-ko-KR.html b/tips/controlled-input-null-value-ko-KR.html index aaf75beafa..5d40516b62 100644 --- a/tips/controlled-input-null-value-ko-KR.html +++ b/tips/controlled-input-null-value-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/controlled-input-null-value.html b/tips/controlled-input-null-value.html index d299a3bb24..d03bf74d7f 100644 --- a/tips/controlled-input-null-value.html +++ b/tips/controlled-input-null-value.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/dangerously-set-inner-html-ko-KR.html b/tips/dangerously-set-inner-html-ko-KR.html index 2de25714a6..07c71fca6d 100644 --- a/tips/dangerously-set-inner-html-ko-KR.html +++ b/tips/dangerously-set-inner-html-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/dangerously-set-inner-html.html b/tips/dangerously-set-inner-html.html index d8316d94e9..5e3361a6c3 100644 --- a/tips/dangerously-set-inner-html.html +++ b/tips/dangerously-set-inner-html.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/dom-event-listeners-ko-KR.html b/tips/dom-event-listeners-ko-KR.html index e74a28aed8..38a7d32ce8 100644 --- a/tips/dom-event-listeners-ko-KR.html +++ b/tips/dom-event-listeners-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/dom-event-listeners.html b/tips/dom-event-listeners.html index f0e317d3fe..275c20e30b 100644 --- a/tips/dom-event-listeners.html +++ b/tips/dom-event-listeners.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/expose-component-functions-ko-KR.html b/tips/expose-component-functions-ko-KR.html index cbfc717b6f..ce7f1eda93 100644 --- a/tips/expose-component-functions-ko-KR.html +++ b/tips/expose-component-functions-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/expose-component-functions-zh-CN.html b/tips/expose-component-functions-zh-CN.html index a78dc3f4cd..b98f12340c 100644 --- a/tips/expose-component-functions-zh-CN.html +++ b/tips/expose-component-functions-zh-CN.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/expose-component-functions.html b/tips/expose-component-functions.html index b925415724..444e707b7e 100644 --- a/tips/expose-component-functions.html +++ b/tips/expose-component-functions.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/false-in-jsx-ko-KR.html b/tips/false-in-jsx-ko-KR.html index 1c351c8793..9535bfa864 100644 --- a/tips/false-in-jsx-ko-KR.html +++ b/tips/false-in-jsx-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/false-in-jsx.html b/tips/false-in-jsx.html index 844c1054a1..542e473717 100644 --- a/tips/false-in-jsx.html +++ b/tips/false-in-jsx.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/if-else-in-JSX-ko-KR.html b/tips/if-else-in-JSX-ko-KR.html index 3ddd1ec0e8..47e299c991 100644 --- a/tips/if-else-in-JSX-ko-KR.html +++ b/tips/if-else-in-JSX-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/if-else-in-JSX-ru-RU.html b/tips/if-else-in-JSX-ru-RU.html index 43e8e70de1..4d059611ce 100644 --- a/tips/if-else-in-JSX-ru-RU.html +++ b/tips/if-else-in-JSX-ru-RU.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/if-else-in-JSX.html b/tips/if-else-in-JSX.html index 9a6337326f..e845a9b4ee 100644 --- a/tips/if-else-in-JSX.html +++ b/tips/if-else-in-JSX.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/initial-ajax-ko-KR.html b/tips/initial-ajax-ko-KR.html index 9a05733c77..e8aa1fdcb9 100644 --- a/tips/initial-ajax-ko-KR.html +++ b/tips/initial-ajax-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/initial-ajax.html b/tips/initial-ajax.html index d874076bf7..34454f140e 100644 --- a/tips/initial-ajax.html +++ b/tips/initial-ajax.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/inline-styles-ko-KR.html b/tips/inline-styles-ko-KR.html index f77ecf6aea..9290fbfe00 100644 --- a/tips/inline-styles-ko-KR.html +++ b/tips/inline-styles-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/inline-styles-ru-RU.html b/tips/inline-styles-ru-RU.html index 7e74bfd8e3..b9860622c0 100644 --- a/tips/inline-styles-ru-RU.html +++ b/tips/inline-styles-ru-RU.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/inline-styles.html b/tips/inline-styles.html index 82d0988e4d..1293d1bd64 100644 --- a/tips/inline-styles.html +++ b/tips/inline-styles.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/introduction-ja-JP.html b/tips/introduction-ja-JP.html index 92ab2b850a..01e1aa31ae 100644 --- a/tips/introduction-ja-JP.html +++ b/tips/introduction-ja-JP.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/introduction-ko-KR.html b/tips/introduction-ko-KR.html index 3ddf292ce5..be43c5ba9f 100644 --- a/tips/introduction-ko-KR.html +++ b/tips/introduction-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/introduction-ru-RU.html b/tips/introduction-ru-RU.html index 707a976ff0..0a7dbbe8e6 100644 --- a/tips/introduction-ru-RU.html +++ b/tips/introduction-ru-RU.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/introduction.html b/tips/introduction.html index edccc671a4..5741778924 100644 --- a/tips/introduction.html +++ b/tips/introduction.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/maximum-number-of-jsx-root-nodes-ko-KR.html b/tips/maximum-number-of-jsx-root-nodes-ko-KR.html index 58b0f66e55..ba83c69fca 100644 --- a/tips/maximum-number-of-jsx-root-nodes-ko-KR.html +++ b/tips/maximum-number-of-jsx-root-nodes-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/maximum-number-of-jsx-root-nodes-ru-RU.html b/tips/maximum-number-of-jsx-root-nodes-ru-RU.html index 118d4323cb..f07049b9e2 100644 --- a/tips/maximum-number-of-jsx-root-nodes-ru-RU.html +++ b/tips/maximum-number-of-jsx-root-nodes-ru-RU.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/maximum-number-of-jsx-root-nodes.html b/tips/maximum-number-of-jsx-root-nodes.html index e4a8e93d34..6b303d0b38 100644 --- a/tips/maximum-number-of-jsx-root-nodes.html +++ b/tips/maximum-number-of-jsx-root-nodes.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/props-in-getInitialState-as-anti-pattern-ko-KR.html b/tips/props-in-getInitialState-as-anti-pattern-ko-KR.html index 245e337607..995549c67d 100644 --- a/tips/props-in-getInitialState-as-anti-pattern-ko-KR.html +++ b/tips/props-in-getInitialState-as-anti-pattern-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/props-in-getInitialState-as-anti-pattern.html b/tips/props-in-getInitialState-as-anti-pattern.html index 357acd93cc..a244f5baa3 100644 --- a/tips/props-in-getInitialState-as-anti-pattern.html +++ b/tips/props-in-getInitialState-as-anti-pattern.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/references-to-components-ko-KR.html b/tips/references-to-components-ko-KR.html index e292b4170c..a6a4bd34c6 100644 --- a/tips/references-to-components-ko-KR.html +++ b/tips/references-to-components-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/references-to-components.html b/tips/references-to-components.html index 8b922e0505..d5fa046178 100644 --- a/tips/references-to-components.html +++ b/tips/references-to-components.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/self-closing-tag-ja-JP.html b/tips/self-closing-tag-ja-JP.html index 6b68e665b0..fda0bda0ef 100644 --- a/tips/self-closing-tag-ja-JP.html +++ b/tips/self-closing-tag-ja-JP.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/self-closing-tag-ko-KR.html b/tips/self-closing-tag-ko-KR.html index 1cd4a8996f..828c5f10d9 100644 --- a/tips/self-closing-tag-ko-KR.html +++ b/tips/self-closing-tag-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/self-closing-tag-ru-RU.html b/tips/self-closing-tag-ru-RU.html index b358aaecc5..b70816fcd4 100644 --- a/tips/self-closing-tag-ru-RU.html +++ b/tips/self-closing-tag-ru-RU.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/self-closing-tag.html b/tips/self-closing-tag.html index 304aec01d9..992fcf43d6 100644 --- a/tips/self-closing-tag.html +++ b/tips/self-closing-tag.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/style-props-value-px-ko-KR.html b/tips/style-props-value-px-ko-KR.html index 5356882fb9..7087fa2f1f 100644 --- a/tips/style-props-value-px-ko-KR.html +++ b/tips/style-props-value-px-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/style-props-value-px-ru-RU.html b/tips/style-props-value-px-ru-RU.html index 556e965cc3..a026b4ed11 100644 --- a/tips/style-props-value-px-ru-RU.html +++ b/tips/style-props-value-px-ru-RU.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/style-props-value-px.html b/tips/style-props-value-px.html index 676b10c560..5f12a08b97 100644 --- a/tips/style-props-value-px.html +++ b/tips/style-props-value-px.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/use-react-with-other-libraries-ko-KR.html b/tips/use-react-with-other-libraries-ko-KR.html index dd85a7f290..d691a90399 100644 --- a/tips/use-react-with-other-libraries-ko-KR.html +++ b/tips/use-react-with-other-libraries-ko-KR.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles
  • diff --git a/tips/use-react-with-other-libraries.html b/tips/use-react-with-other-libraries.html index 59342d703c..79434091a3 100644 --- a/tips/use-react-with-other-libraries.html +++ b/tips/use-react-with-other-libraries.html @@ -422,6 +422,10 @@ Codebase Overview +
  • + Implementation Notes +
  • +
  • Design Principles