### React Component Patterns **Related topics**: - [Thinking in React](./thinking-in-react-and-flux.md): Articles discussing ways to think about React applications and component structure - **[React Implementation and Concepts](./react-implementation.md)**: Includes articles that explain the differences between "components", "elements", and "instances" - **[React Component Composition](./react-component-composition.md)**: Articles explaining ways to compose components, including Higher-Order Components, Function-as-Child / "render props", and other functional composition approaches #### Component Terms, Concepts, and Types - **React Patterns** http://reactpatterns.com/ An excellent list of common patterns for structuring React components, with examples - **React Component Jargon as of August 2016** https://medium.com/@arcomito/react-component-jargon-as-of-august-2016-28451d8ceb1d A very useful glossary of widely-used terms describing React components - **React in Patterns** https://github.com/krasimir/react-in-patterns http://krasimirtsonev.com/blog/article/react-js-presentational-container-components List of design patterns/techniques used while developing with React - **Embracing Functions in React** https://medium.com/javascript-inside/embracing-functions-in-react-d7d558d8bd30 A look at stateless functional components in React, and why they might be useful or should be considered in the first place. - **Building User Interfaces with Pure Functions and Function Composition in React** https://tylermcginnis.com/building-user-interfaces-with-pure-functions-and-function-composition-in-react-js/ A look at the idea of composing together UIs with simple components, with comparisons to the idea of combining functions together. - **React Bits: React patterns, techniques, tips, and tricks** https://github.com/vasanthk/react-bits An extensive list of terms, concepts, patterns, and techniques for writing React components, with explanations and examples. A few of the descriptions are overly opinionated and some items are not things the React team would recommend, but overall an excellent resource. - **Simple React Patterns** http://lucasmreis.github.io/blog/simple-react-patterns/ A clearly written set of examples that showcase common React component patterns like "container/presentational", "Higher-Order Components", "Function-as-Child" / "render props", and "providers". - **React Component Patterns** https://medium.com/gitconnected/react-component-patterns-ab1f09be2c82 A summary of common React component patterns with short examples. - **10 React mini-patterns** https://hackernoon.com/10-react-mini-patterns-c1da92f068c5 Ten useful patterns for working with React components, including data flow, techniques for working with inputs, controlling CSS usage, switching between components, and more. - **The Common Patterns of React** https://blog.pixelingene.com/2017/09/the-common-patterns-of-react/ A friendly visual overview of common React patterns like higher-order components, function-as-child, context, callbacks, container/presentational components, and compound components. #### Component Definition Approach Comparisons - **How to use Classes and Sleep at Night** https://medium.com/@dan_abramov/how-to-use-classes-and-sleep-at-night-9af8de78ccb4 Some pragmatic opinions on when and how to use the ES6 "class" keyword, particularly in relation to React components. - **React Stateless Functional Components: Nine Wins You Might Have Overlooked** https://medium.com/@housecor/react-stateless-functional-components-nine-wins-you-might-have-overlooked-997b0d933dbc Thoughts on reasons why you might want to write more components using the functional syntax. - **7 Reasons to Outlaw React's Functional Components** https://medium.freecodecamp.org/7-reasons-to-outlaw-reacts-functional-components-ff5b5ae09b7c The author of the "Nine Wins" post gives some counter-arguments on why you might want to prefer writing class components instead of functional components. Some good discussion in the comments. - **How to declare React Components in 2017** https://medium.com/@npverni/how-to-declare-react-components-in-2017-2a90d9f7984c A quick overview of the three ways to declare React components, and which ones should be preferred. - **We Jumped the Gun Moving React Components to ES2015 Class Syntax** https://medium.com/dailyjs/we-jumped-the-gun-moving-react-components-to-es2015-class-syntax-2b2bb6f35cb3 A Netflix engineer raises concerns about React deprecating `createClass` and pushing users to use ES6 classes. I personally think his concerns are overstated, but there's some interesting points, plus good discussion in the comments. #### Component Rendering Logic - **Dynamically Rendering React Components** https://wail.es/dynamically-rendering-react-components/ Examples of how to dynamically determine which React component to render - **Loading State Trick for Stateless Functional Components in React** http://kyleshevlin.com/loading-state-trick-for-stateless-functional-components-in-react/ An example of conditionally rendering a spinner component if a list of items is empty - **How to Dynamically Render React Components** http://kyleshevlin.com/how-to-dynamically-render-react-components/ A quick example of how to dynamically decide which component type to render - **All the Conditional Renderings in React** https://www.robinwieruch.de/conditional-rendering-react/ Examples of all the possible ways to conditionally render components - **"React render function organization"** https://gist.github.com/markerikson/47fff93c92286db72b22bab5b02e2da3 My suggested approach for organizing render function logic for clarity and readability - **Simplify complex React components with generators** https://nvbn.github.io/2017/03/14/react-generators/ An interesting alternative to the usual if/else-type logic for conditionally rendering components, by using ES6 generators to yield the right pieces to render. #### React Component Children - **Ownership and Children in React** http://ctheu.com/2015/02/10/ownership-and-children-in-reactjs/ Discusses the difference between "parent" and "owner" relationships, and what the `children` prop can look like. - **ReactCasts #3: React's Children API** https://www.youtube.com/watch?v=DJ53-G8EbxE A screencast demonstrating how the `children` prop to compose components together - **React.Children and the React Top-Level API** http://callahan.io/blog/2016/09/16/react-dot-children-and-the-react-top-level-api/ Overviews and examples of the `React.Children` APIs, and how they can be used to manipulate component children - **Send Props to Children in React** http://jaketrent.com/post/send-props-to-children-react/ Examples of how to pass new props to child components using `React.Children` - **A deep dive into children in React** http://mxstbr.blog/2017/02/react-children-deepdive/ An in-depth look at the power and capabilities of React's `children` prop, and how children can be reused and modified. Includes several examples and demos. - **The "Forwarded Refs" pattern** https://github.com/reactjs/react-redux/pull/270#issuecomment-175217424 An example of the "forwarded refs" pattern, where a parent component passes a callback through one or more layers of children, it's used as a `ref` callback, and the parent receives the nested DOM element reference directly. - **React component composition cheatsheet** https://github.com/xat/react-component-composition-cheatsheet A useful list of ways to combine components together - **Avoiding deeply nested component trees** https://medium.com/@RubenOostinga/avoiding-deeply-nested-component-trees-973edb632991 Examples of `children` to include arbitrary content inside of a component for more flexible handling of presentation and composition. - **Tips on Creating Reusable Components** http://dylanpaulus.com/reactjs/2017/09/08/tips-on-creating-reusable-components.1/ Examples of using `children` and other props to make components more composable and reusable. - **How to auto bind props using React elements** http://www.albertgao.xyz/2017/10/28/how-to-auto-bind-props-by-using-react-element/ Examples of using the `React.Children` API to add additional props to child components - **React sub-components** https://itnext.io/react-sub-components-513f6679abed Demonstrates defining "sub-components" like `Article.Title`, and using `React.Children` to ensure they're composed correctly. #### React Component Lifecycle - **React Docs: Component Specs and Lifecycle** https://reactjs.org/docs/react-component.html The official React docs page on component lifecycle - **React 16.3+ Interactive Lifecycle Methods Diagram** http://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/ https://twitter.com/dan_abramov/status/981712092611989509 An excellent interactive diagram that shows the sequence of lifecycle methods in React 16.3+, and how they relate to React's "render" and "commit" update phases. Based on a diagram by Dan Abramov. - **Understanding the React Component Lifecycle** http://busypeoples.github.io/post/react-component-lifecycle/ A good look at which lifecycle methods run in which situations, as well as the signatures of each method. - **Dissecting React Lifecycle Methods** https://medium.com/@fay_jai/dissecting-reactjs-lifecycle-methods-be4fdea11c6d Breaks the lifecycle methods down into "mount/unmount" and "update" categories, and describes the purpose and use of each. - **The React Component Lifecycle** https://www.kirupa.com/react/component_lifecycle.htm Another useful description of the order and purpose of the lifecycle methods. - **Understanding React - Component life-cycle** https://medium.com/@baphemot/understanding-reactjs-component-life-cycle-823a640b3e8d An extensive description of the various React lifecycle methods, and how you should and shouldn't use them. - **Lifecycle Simulators** https://reactarmory.com/guides/lifecycle-simulators An interactive set of simulators for React components that let you step through a component's lifecycle and watch how state and props respond to actions over time. - **React In-Depth: The React Life Cycle** https://developmentarc.gitbooks.io/react-indepth/content/ A deep dive into the lifecycle methods, and various techniques for using them. - **React Lifecycle Cheatsheet** https://gist.github.com/bvaughn/923dffb2cd9504ee440791fade8db5f9 A table listing the lifecycle methods, when they're called, whether each method allows side effects or state updates, and examples uses for each method - **React Lifecycle Methods - how and when to use them** https://engineering.musefind.com/react-lifecycle-methods-how-and-when-to-use-them-2111a1b692b1 A helpful description of the major component lifecycle methods, including descriptions of common use cases for each one, and whether you can call `setState` inside. - **Revisiting use of React's Component Lifecycles in Anticipation of Async Rendering** https://medium.com/@awebofbrown/how-to-safely-use-reacts-life-cycles-with-fiber-s-async-rendering-fd4469ebbd8f An informative look at how async rendering in React 16+ might impact current use of lifecycle methods for behavior. #### Component Communication - **8 no-Flux strategies for React component communication** https://www.javascriptstuff.com/component-communication Very helpful list of ways to have React components communicate back and forth - **How to communicate between React components** http://ctheu.com/2015/02/12/how-to-communicate-between-react-components/ Another good list of component communication strategies - **How React Components Communicate** http://react.tips/how-reactjs-components-communicate/ A careful tutorial-based explanation of how to communicate between parent and child components. - **How to handle React context in a reliable way** https://medium.com/react-ecosystem/how-to-handle-react-context-a7592dfdcbc Covers what the `context` feature is, how to use it, and some concerns to be aware of. - **How to safely use React context** https://medium.com/@mweststrate/how-to-safely-use-react-context-b7e343eff076 Guidelines for when and how to actually use React's `context` feature - **Context All the Things with React** https://www.youtube.com/watch?v=k9AhBMwj1w4 A talk on what `context` is, and how to use it safely - **ReactCasts #4-5: Context (Parts 1 and 2)** https://www.youtube.com/watch?v=lxq938kqIss https://www.youtube.com/watch?v=mwYHDXS6uSc A two-part series explaining what React's `context` feature can be used for, and some potential concerns to be aware of when using it. - **React Context and Component Coupling** https://medium.com/differential/react-context-and-component-coupling-86e535e2d599 Discussion on the pros and cons of using `context` to pass data between components, and some examples of how to do so - **Higher Order With Context** https://dev.to/kayis/higher-order-with-context https://dev.to/kayis/higher-order-components-and-context-example Examples of using Higher Order Components to pass data to nested components using `context` - **Callback functions in React** https://medium.com/@thejasonfile/callback-functions-in-react-e822ebede766 Some basic explanations of how a React app uses callback functions to communicate from children to parents - **How to use React's Provider pattern** https://www.robinwieruch.de/react-provider-pattern-context/ Walks through the concepts and implementation of a "Provider" component that makes data available to deeply nested children, similar to the ones that come with Redux and MobX - **Passing Data Between React Components** https://medium.com/@ruthmpardee/passing-data-between-react-components-103ad82ebd17 Some short examples of how to pass data between parents, children, and siblings. - **How to structure components in React?** https://reallifeprogramming.com/how-to-structure-components-in-react-54fc43e71546 Compares multiple ways to pass data from a parent to a child, including no props, passing a value object, passing required props, passing a map of props, and using `children`. - **Context 101** http://reactboston.surge.sh/#/ Slides from Ken Wheeler's ReactBoston talk on React's `context` feature. Covers what context is, why you might want to use it, and when/ how to use it/ - **Bitmasks and the new React Context API** https://hph.is/coding/bitmasks-react-context An explanation of how the new version of context works, and how change updates can be optimized using a bitmasking approach. - **Exploring the React Context API with Provider and Consumer** https://www.robinwieruch.de/react-context-api/ Explains the use cases for the new context API, and demonstrates how to use it both by itself and wrapped in a higher-order component. - **React's new Context API and Actions** https://dev.to/washingtonsteven/reacts-new-context-api-and-actions-446o Shows how to update values being passed through context, and particularly how to pass down functions that can be used to update the values. - **Understanding the React Context API** http://joecortopassi.com/articles/react-context-api/ Simple breakdown of how to use the React Context API, with code samples and diagrams. #### Component Categories - **Presentational and Container Components** https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0 Dan Abramov's foundational article on classifying components based on intent and behavior. A must-read for anyone using React. - **"People are reading way too much into 'presentational' vs 'container'"** https://twitter.com/dan_abramov/status/802569801906475008 Dan Abramov follows up his article by emphasizing that "presentational" and "container" was just a pattern he had noticed, rather than an approach that _must_ be followed - **Leveling Up with React: Container Components** https://css-tricks.com/learning-react-container-components/ Describes the container component pattern and how to use it to split up responsibilities between fetching and displaying data. - **Smart and Dumb Components in React** http://jaketrent.com/post/smart-dumb-components-react/ Another look at ways to conceptually categorize components based on responsibilities, and some ways you can organize your code based on those concepts. - **Ramblings About React and Redux Architecture** https://medium.com/@kurtiskemple/ramblings-about-react-and-redux-architecture-c27dfff79ddf Thoughts on structuring components as "Providers", "Behavior", and "Presentational" - **The Anatomy of a React Redux App** https://medium.com/@rajaraodv/the-anatomy-of-a-react-redux-app-759282368c5a Breaks down the component structure of a typical React/Redux app, and classifies the different types of components that usually show up - **React and Flux in Production Best Practices** https://medium.com/@delveeng/react-and-flux-in-production-best-practices-c87766c57cb6 Delve's practice of describing components as "containers", "smart", and "dumb" - **Content vs Container** https://hackernoon.com/content-vs-container-e0a1ada681c1 General advice for determining component responsibilities in terms of content, layout, and logic - **The React + Redux Container Pattern** http://www.thegreatcodeadventure.com/the-react-plus-redux-container-pattern/ Explanation and examples of "container" and "presentational" components and their responsibilities. Uses Redux for the examples, but the principles apply to "just" React as well. - **Refactoring React - Extracting Layout Components** http://erikaybar.name/refactoring-react-extracting-layout-components/ Demonstrates creating reusable components that manage some aspects of styling and layout, such as a button with multiple sizes and colors. - **Share Code between React and React Apps** https://hackernoon.com/code-reuse-using-higher-order-hoc-and-stateless-functional-components-in-react-and-react-native-6eeb503c665 An exploration of how to refactor code to extract functional components and higher-order components for improved code reuse, including reusing the same components in both React and React Native apps. - **Reusable state for React UI components** https://medium.com/@efreyreg/reusable-state-for-react-ui-components-e38c5af40be4 An example of taking a component that has both state, logic, and presentation, and extracting the logic and presentation into separate components. Also demonstrates using a Redux-like approach to update logic without actually using Redux. - **Refactoring React** https://8thlight.com/blog/josh-mccormick/2017/08/21/refactoring-react.html Demonstrates extracting state and logic out of a component to separate responsibility and improve ease of testing. - **How do you separate React components?** https://reactarmory.com/answers/how-should-i-separate-components Describes four categories of React components ("view", "control", "controllers", and "containers"), and gives suggestions on when and how to factor out new components. - **Refactoring: Moving API calls to a higher-order component** https://medium.com/@guigonc/refactoring-moving-api-calls-to-a-higher-order-component-53062c086cb Shows how to progressively refactor fetching logic out of a component and move it into a parent component, then make that parent component reusable. - **The React + Redux Container Pattern** https://dev.to/sophiedebenedetto/the-react--redux-container-pattern-bmk An excellent explanation of what "container components" and "presentational components" are, with discussion of how they fit together and a good sample project implementing the ideas. #### Wrapping Non-React Code - **React and third-party libraries** http://krasimirtsonev.com/blog/article/react-third-party-library-integration Demonstrates how to build a React component that wraps up non-React code like a jQuery UI plugin - **Declaratively Rendering Earth in 3D, Part 2: Controlling Cesium with React** http://blog.isquaredsoftware.com/2017/03/declarative-earth-part-2-cesium-react/ A detailed description of how to create React components that wrap up a 3D globe library, including use of lifecycle methods for controlling imperative non-React APIs. - **When to use Ref on a DOM Node in React** https://www.robinwieruch.de/react-ref-attribute-dom-node/ An explanation of the `ref` property, how to use it to access real DOM nodes, and when you should use it. - **Using React and jQuery Together** http://tech.oyster.com/using-react-and-jquery-together/ Examples of how to use jQuery inside a React component, and React inside jQuery-controlled elements - **Mapping declarative React components to imperative external APIs** http://reactkungfu.com/2016/02/mapping-declarative-react-components-to-imperative-external-api/ A quick example of using `componentWillReceiveProps` to pass updates to an imperative API - **How to Write a Google Maps React Component** https://www.fullstackreact.com/articles/how-to-write-a-google-maps-react-component/ Demonstrates how to wrap a third-party component that has an imperative API, lazy-loading the dependencies, and more. - **Building SVG Maps with React** https://blog.komand.com/building-svg-maps-with-react Demonstrates building a component that zooms and pans SVG graphics based on user input. - **How to Sprinkle ReactJS into an Existing Web Application** https://scotch.io/tutorials/how-to-sprinkle-reactjs-into-an-existing-web-application Looks at how to incrementally add some React-based functionality into an existing app, including interaction with jQuery. - **How to Use jQuery Libraries in the React Ecosystem** https://medium.com/@superKalo/how-to-use-jquery-libraries-in-the-react-ecosystem-7dfeb1aafde0 Some excellent examples of using React components to wrap up jQuery plugins: creating the plugin instance, updating the plugin from React props, and destroying the plugin on unmount. - **Introducing React into an Existing Application** https://medium.com/nthrive-analytics/introducing-react-into-an-existing-application-17490841796e Some examples of how to progressively add React components into an existing jQuery-based application and keep them in sync with the rest of the app. - **How to use D3.js in React** http://cmichel.io/how-to-use-d3js-in-react/ An overview of three ways to integrate D3 into a React app: using React to render, using D3 to render, and a hybrid approach. - **Renderless Components, or How Logic Doesn't Always Need a UI** http://kyleshevlin.com/renderless-components/ Shows how you can create components that return null from `render`, and use React's lifecycle methods to drive imperative logic rather than rendering UI. - **Getting Started with React and Leaflet** https://www.azavea.com/blog/2016/12/05/getting-started-with-react-and-leaflet/ Examples of how to create React components that interact with the Leaflet maps library. - **How (and why) to use D3 with React** https://hackernoon.com/how-and-why-to-use-d3-with-react-d239eb1ea274 A good overview of some of the libraries and approaches you can make use of to use D3 in a React app - **Integrating React with an Existing jQuery Web Application** http://www.primaryobjects.com/2017/05/08/integrating-react-with-an-existing-jquery-web-application/ Covers 3 methods for methods for integrating React and jQuery: referencing jQuery from within React, using a helper class passed to React, and using a pub-sub model passed to React. - **Building D3 Components with React** https://hackernoon.com/building-d3-components-with-react-7510e4743288 A detailed walk through custom integration of D3 and React without use of an additional library. - **PixiJS Application in a React Component** https://www.protectator.ch/post/pixijs-v4-in-a-react-component A quick example of loading PixiJS and wrapping it in a React component, showing the basics for integration. - **Using D3 and React Together to Make Visualizations with TypeScript** https://spin.atomicobject.com/2017/07/20/d3-react-typescript/ Examples of some possible approaches to using D3 inside of React, including use of refs and components. - **Wrapping Web Components With React** https://www.sitepen.com/blog/2017/08/08/wrapping-web-components-with-react/ A detailed walkthrough of how to create React components that wrap up existing web components, including managing props, handling events, and keeping the DOM in sync. - **How to integrate React into an existing app?** https://reactarmory.com/answers/how-to-integrate-react-into-existing-app Looks at ways to add React to an existing page, even if there's no build step. - **Integrating Imperative APIs into a React application** https://medium.com/netflix-techblog/integrating-imperative-apis-into-a-react-application-1257e1b45ac6 A higher-level discussion of how to design declarative React components that encapsulate imperative APIs. - **Bringing Together React, D3, and Their Ecosystem** https://www.smashingmagazine.com/2018/02/react-d3-ecosystem/ An extensive article that looks at common D3 wrapper patterns and libraries, approaches for using D3 inside of React, and React-specific D3 libraries, and gives some suggestions for how to decide which approach and library to use for your project. #### Modal Dialogs - **How to Render Components Outside the Main React App** https://blog.komand.com/how-to-render-components-outside-the-main-react-app An example of a technique that's also know as the "portal" approach, commonly used for rendering modals on top of the rest of an application. - **Modals in React** https://medium.com/@david.gilbertson/modals-in-react-f6c3ff9f4701 A demonstration of building a reusable modal component using the "portals" technique - **Modal Dialogs in React** https://daveceddia.com/open-modal-in-react/ An excellent example of how to approach rendering modals in React, by controlling them with props - **Modal window in React from scratch** https://peteris.rocks/blog/modal-window-in-react-from-scratch/ Walks through creating a Modal component with styling and display logic - **React Modals** https://medium.com/@danparkk/react-modals-scalable-customizable-neat-components-f2088d60f3d3 An extended discussion of what concepts are involved in creating modals in web pages, why this can become complex, and how to implement them in a scalable way using React and Redux. - **Tasks and Portals in React** https://medium.com/@MoneyhubEnterpr/tasks-and-portals-in-react-1df2438cdebb Describes how MoneyHub implemented modal dialogs with wizard-like workflows that tie together multiple screens, using a combination of container components and portals. - **Good React Modals** https://medium.com/@elsdoerfer/good-react-modals-548cd9c2f7f4 Covers ways to handle issues with modal content not being rendered while doing animations, and side-loading data for a modal while maintaining a loading indicator. - **Using a React 16 Portal to do something cool** https://hackernoon.com/using-a-react-16-portal-to-do-something-cool-2a2d627b0202 Demonstrates using React 16's `createPortal` API to control a separate browser window from the original React component tree. #### Alternate Component Creation Approaches - **React without `this`** https://medium.com/@baronmaximilianwilleford/react-without-this-39a76b8f2160 Describes an alternate approach to writing components using factory functions to eliminate the need for the `this` keyword. Not the common approach, but an interesting idea. - **my-react** https://github.com/mjackson/my-react A small library from Michael Jackson (co-creator of React Router) that allows defining components using a Python-style approach where functions receive the component instance as the first argument. - **lively** https://github.com/jlongster/lively An experimental library from James Long that tries to improve React's component API to avoid using classes #### Other Component Patterns - **The React Controller View Pattern** http://blog.andrewray.me/the-reactjs-controller-view-pattern/ Describes using top-level components to hold state and pass it to children as props - **Make Your React Components Pretty** https://medium.com/walmartlabs/make-your-react-components-pretty-a1ae4ec0f56e Techniques for making your components easier to read, including using functional components, using JSX spread for props, and use of destructuring. - **Component Factories in React.js** https://github.com/szabototo89/create-it/blob/master/docs/article-full.md A variation on Dependency Injection for React components - **"What is the ideal way to pass data to a callback prop?** https://gist.github.com/jazlalli/fdee443405680f96d19211daa15d1d38 Discussion and examples of various ways to pass data to callbacks between children and parents - **On Privacy with React Context** https://medium.com/@amireh/on-privacy-with-react-context-aa77ffd08509 Thoughts on some potential issues with various component/state patterns (globals, Redux, Flux, Ember), and a sketch of a notional approach that might help solve some of those issues. - **Internationalizing React Apps** https://www.smashingmagazine.com/2017/01/internationalizing-react-apps/ An extended investigation of server and client aspects needed for internationalization. - **Creating a cross-domain React component with xcomponent** https://medium.com/@bluepnume/creating-a-cross-domain-react-component-with-xcomponent-fbcccc4778fd A look at how to wrap a React component using the xcomponent library, so that it can be rendered and used across domains. - **Using React v16 to create self-destructing components** https://medium.com/@gajus/using-react-v16-to-create-self-destructing-components-de8e4eb61d0f Demonstrates how a tiny component that simply returns its own children can simplify the process of returning arrays of components in React 16. - **3 React Gripes** https://gist.github.com/jlongster/febd2a397aff9501abec0c2d66075ec8 https://twitter.com/jlongster/status/921016877408837632 James Long describes three things about React that bother him: inability to easily have parents get refs to nested elements, PureComponents comparing both props and state, and a general tendency to do lots of processing in `componentWillReceiveProps`. Some good discussion in both the gist comments and Twitter. - **You don't need to know "Dependency Injection"** https://hackernoon.com/you-dont-need-to-know-dependency-injection-2e9d2ba1978a Looks at the concept of dependency injection, and three ways that that relates to React components and props.