CS142 Lecture Notes - ReactJS
ReactJS Introduction
Mendel Rosenblum
CS142 Lecture Notes - ReactJS
ReactJS
● JavaScript framework for writing the web applications
○ Like AngularJS - Snappy response from running in browser
○ Less opinionated: only specifies rendering view and handling user interactions
● Uses Model-View-Controller pattern
○ View constructed from Components using pattern
○ Optional, but commonly used HTML templating
● Minimal server-side support dictated
● Focus on supporting for programming in the large and single page applications
○ Modules, reusable components, testing, etc.
CS142 Lecture Notes - ReactJS
ReactJS Web Application Page
<!doctype html>
<html>
<head>
<title>CS142 Example</title>
</head>
<body>
<div id="reactapp"></div>
<script src="./webpackOutput/reactApp.bundle.js"></script>
</body>
</html>
ReactJS applications come as a
JavaScript blob that will use the DOM
interface to write the view into the div.
CS142 Lecture Notes - ReactJS
ReactJS tool chain
Babel - Transpile language features (e.g. ECMAScript, JSX) to basic JavaScript
Webpack - Bundle modules and resources (CSS, images)
Output loadable with single script tag in any browser
Component #1
Component #2
Component #N
...
Babel
Babel
Babel
Webpack
Output
Bundle.js
React.js
React Components
CS142 Lecture Notes - ReactJS
reactApp.js - Render element into browser DOM
import React from 'react';
import ReactDOM from 'react-dom';
import ReactAppView from './components/ReactAppView';
let viewTree = React.createElement(ReactAppView, null);
let where = document.getElementById('reactapp');
ReactDOM.render(viewTree, where);
Renders the tree of React elements (single component
named ReactAppView) into the browser's DOM at the
div with id=reactapp.
ES6 Modules - Bring in
React and web app React
components.
CS142 Lecture Notes - ReactJS
components/ReactAppView.js - ES6 class definition
import React from 'react';
class ReactAppView extends React.Component {
constructor(props) {
super(props);
...
}
render() { ...
};
export default ReactAppView;
Require method render() - returns React
element tree of the Component's view.
Inherits from React.Component. props is
set to the attributes passed to the
component.
CS142 Lecture Notes - ReactJS
ReactAppView render() method
render() {
let label = React.createElement('label', null,'Name: ');
let input = React.createElement('input',
{ type: 'text', value: this.state.yourName,
onChange: (event) => this.handleChange(event) });
let h1 = React.createElement('h1', null,
'Hello ', this.state.yourName, '!');
return React.createElement('div', null, label, input, h1);
}
Returns element tree with div (label, input, and h1) elements
<div>
<label>Name: </label>
<input type="text" … />
<h1>Hello {this.state.yourName}!</h1>
</div>
CS142 Lecture Notes - ReactJS
ReactAppView render() method w/o variables
render() {
return React.createElement('div', null,
React.createElement('label', null,'Name: '),
React.createElement('input',
{ type: 'text', value: this.state.yourName,
onChange: (event) => this.handleChange(event) }),
React.createElement('h1', null,
'Hello ', this.state.yourName, '!')
);
}
CS142 Lecture Notes - ReactJS
Use JSX to generate calls to createElement
render() {
return (
<div>
<label>Name: </label>
<input
type="text"
value={this.state.yourName}
onChange={(event) => this.handleChange(event)}
/>
<h1>Hello {this.state.yourName}!</h1>
</div>
);
}
● JSX makes building tree look like templated HTML embedded in JavaScript.
CS142 Lecture Notes - ReactJS
Component state and input handling
import React from 'react';
class ReactAppView extends React.Component {
constructor(props) {
super(props);
this.state = {yourName: ""};
}
handleChange(event) {
this.setState({ yourName: event.target.value });
}
....
● Input calls to setState which causes React to call render() again
Make <h1>Hello {this.state.yourName}!</h1>
work
CS142 Lecture Notes - ReactJS
One way binding: Type 'D' Character in input box
● JSX statement: <input type="text" value={this.state.yourName}
onChange={(event) => this.handleChange(event)} />
Triggers handleChange call with event.target.value == "D"
● handleChange - this.setState({yourName: event.target.value});
this.state.yourName is changed to "D"
● React sees state change and calls render again:
● Feature of React - highly efficient re-rendering
CS142 Lecture Notes - ReactJS
Calling React Components from events: A problem
class ReactAppView extends React.Component {
...
handleChange(event) {
this.setState({ yourName: event.target.value });
}
...
}
Understand why:
<input type="text" value={this.state.yourName} onChange={this.handleChange} />
Doesn't work!
CS142 Lecture Notes - ReactJS
Calling React Components from events workaround
● Create instance function bound to instance
class ReactAppView extends React.Component {
constructor(props) {
super(props);
this.state = {yourName: ""};
this.handleChange = this.handleChange.bind(this);
}
handleChange(event) {
this.setState({ yourName: event.target.value });
}
CS142 Lecture Notes - ReactJS
Calling React Components from events workaround
● Using public fields of classes with arrow functions
class ReactAppView extends React.Component {
constructor(props) {
super(props);
this.state = {yourName: ""};
}
handleChange = (event) => {
this.setState({ yourName: event.target.value });
}
...
CS142 Lecture Notes - ReactJS
Calling React Components from events workaround
● Using arrow functions in JSX
class ReactAppView extends React.Component {
…
handleChange(event) {
this.setState({ yourName: event.target.value });
}
render() {
return (
<input type="text" value={this.state.yourName}
onChange={(event) => this.handleChange(event)} />
);
}
CS142 Lecture Notes - ReactJS
A digression: camelCase vs dash-case
Word separator in multiword variable name
● Use dashes: active-buffer-entry
● Capitalize first letter of each word: activeBufferEntry
Issue: HTML is case-insensitive but JavaScript is not.
ReactJS's JSX has HTML-like stuff embedded in JavaScript.
ReactJS: Use camelCase for attributes
AngularJS: Used both: dashes in HTML and camelCase in JavaScript!
CS142 Lecture Notes - ReactJS
Programming with JSX
● Need to remember: JSX maps to calls to React.createElement
○ Writing in JavaScript HTML-like syntax that is converted to JavaScript function calls
● React.createElement(type, props, ...children);
○ type: HTML tag (e.g. h1, p) or React.Component
○ props: attributes (e.g. type="text") Uses camelCase!
○ children: Zero or more children which can be either:
■ String or numbers
■ A React element
■ An Array of the above
CS142 Lecture Notes - ReactJS
JSX templates must return a valid children param
● Templates can have JavaScript scope variables and expressions
○ <div>{foo}</div>
■ Valid if foo is in scope (i.e. if foo would have been a valid function call parameter)
○ <div>{foo + 'S' + computeEndingString()}</div>
■ Valid if foo & computeEndString in scope
● Template must evaluate to a value
○ <div>{if (useSpanish) { … } }</div> - Doesn't work: if isn't an expression
○ Same problem with "for loops" and other JavaScript statements that don't return values
● Leads to contorted looking JSX: Example: Anonymous immediate functions
○ <div>{ (function() { if …; for ..; return val;})() }</div>
CS142 Lecture Notes - ReactJS
Conditional render in JSX
● Use JavaScript Ternary operator (?:)
<div>{this.state.useSpanish ? <b>Hola</b> : "Hello"}</div>
● Use JavaScript variables
let greeting;
const en = "Hello"; const sp = <b>Hola</b>;
let {useSpanish} = this.prop;
if (useSpanish) {greeting = sp} else {greeting = en};
<div>{greeting}</div>
CS142 Lecture Notes - ReactJS
Iteration in JSX
● Use JavaScript array variables
let listItems = [];
for (let i = 0; i < data.length; i++) {
listItems.push(<li key={data[i]}>Data Value {data[i]}</li>);
}
return <ul>{listItems}</ul>;
● Functional programming
<ul>{data.map((d) => <li key={d}>Data Value {d}</li>)}</ul>
key= attribute improves efficiency of rendering on data change
CS142 Lecture Notes - ReactJS
Styling with React/JSX - lots of different ways
import React from 'react';
import './ReactAppView.css';
class ReactAppView extends React.Component {
…
render() {
return (
<span className="cs142-code-name">
...
</span>
);
Webpack can import CSS style sheets:
.cs142-code-name {
font-family: Courier New, monospace;
}
Must use className= for HTML
class= attribute (JS keyword
conflict)
CS142 Lecture Notes - ReactJS
Component lifecycle and methods
http://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/
CS142 Lecture Notes - ReactJS
Example of lifecycle methods - update UI every 2s
class Example extends React.Component {
...
componentDidMount() { // Start 2 sec counter
const incFunc =
() => this.setState({ counter: this.state.counter + 1 });
this.timerID = setInterval(incFunc, 2 * 1000);
}
componentWillUnmount() { // Shutdown timer
clearInterval(this.timerID);
}
...
CS142 Lecture Notes - ReactJS
Stateless Components
● React Component can be function (not a class) if it only depends on props
function MyComponent(props) {
return <div>My name is {props.name}</div>;
}
Or using destructuring...
function MyComponent({name}) {
return <div>My name is {name}</div>;
}
● React Hooks (https://reactjs.org/docs/hooks-intro.html)
○ Add state to stateless components - can do pretty much everything the class method can
CS142 Lecture Notes - ReactJS
Example React Hooks
import React, { useState, useEffect } from 'react';
function Example() {
const [count, setCount] = useState(0);
useEffect(() => {
document.title = `You clicked ${count} times`;
});
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
CS142 Lecture Notes - ReactJS
Communicating between React components
● Passing information from parent to child: Use props (attributes)
<ChildComponent param={infoForChildComponent} />
● Passing information from child to parent: Callbacks
this.parentCallback = (infoFromChild) =>
{ /* processInfoFromChild */};
<ChildComponent callback={this.parentCallback}> />
● React Context (https://reactjs.org/docs/context.html)
○ Global variables for subtree of components

More Related Content

PDF
MVC Architecture
PDF
Feature Driven Development
PDF
Code Refactoring
PPTX
Angular 14.pptx
PDF
Model View Controller (MVC)
PPTX
Training: MVVM Pattern
PDF
Angular Libraries & NPM
PPTX
Ajax
MVC Architecture
Feature Driven Development
Code Refactoring
Angular 14.pptx
Model View Controller (MVC)
Training: MVVM Pattern
Angular Libraries & NPM
Ajax

What's hot (20)

PDF
PPT
Mvc architecture
PDF
LinkedIn - A Professional Network built with Java Technologies and Agile Prac...
PPT
C# basics
PPTX
.Net Core
PPTX
Agile Software Development Life Cycle
PPTX
Sequelize
PPTX
Backend Programming
PPT
Setting up your development environment
PPTX
Memory Management in the Java Virtual Machine(Garbage collection)
PPTX
Software Engineering
PPTX
Feature driven development (FDD)
PPTX
React Class Components vs Functional Components: Which is Better?
PPTX
CS8651 IP Unit 3.pptx
PPT
Introduction to JavaScript
PPT
ASP.NET MVC Presentation
PPTX
Build RESTful API Using Express JS
PPTX
React JS - A quick introduction tutorial
PDF
Intro to html 5
PPTX
OOP interview questions & answers.
Mvc architecture
LinkedIn - A Professional Network built with Java Technologies and Agile Prac...
C# basics
.Net Core
Agile Software Development Life Cycle
Sequelize
Backend Programming
Setting up your development environment
Memory Management in the Java Virtual Machine(Garbage collection)
Software Engineering
Feature driven development (FDD)
React Class Components vs Functional Components: Which is Better?
CS8651 IP Unit 3.pptx
Introduction to JavaScript
ASP.NET MVC Presentation
Build RESTful API Using Express JS
React JS - A quick introduction tutorial
Intro to html 5
OOP interview questions & answers.
Ad

Similar to ReactJS.pdf (20)

PDF
ReactJS - frontend web developing reactjs
PPTX
PPTX
React/Redux
PDF
Redux vs Alt
PPTX
React + Redux Introduction
PDF
Learning React: Facebook's Javascript Library For Building User Interfaces
PPTX
Academy PRO: React JS
PDF
React lecture
PPTX
PDF
Dive into React Performance
PPTX
Using react with meteor
PDF
An introduction to React.js
PPT
PPTX
React - Start learning today
PPTX
React & Redux for noobs
PDF
Reactive.architecture.with.Angular
PDF
React native
PPTX
Let's react - Meetup
PPTX
Combining Angular and React Together
PDF
Universal JS Applications with React
ReactJS - frontend web developing reactjs
React/Redux
Redux vs Alt
React + Redux Introduction
Learning React: Facebook's Javascript Library For Building User Interfaces
Academy PRO: React JS
React lecture
Dive into React Performance
Using react with meteor
An introduction to React.js
React - Start learning today
React & Redux for noobs
Reactive.architecture.with.Angular
React native
Let's react - Meetup
Combining Angular and React Together
Universal JS Applications with React
Ad

Recently uploaded (20)

PPTX
Modernising the Digital Integration Hub
PDF
A Late Bloomer's Guide to GenAI: Ethics, Bias, and Effective Prompting - Boha...
PDF
A contest of sentiment analysis: k-nearest neighbor versus neural network
PDF
Unlock new opportunities with location data.pdf
PDF
Zenith AI: Advanced Artificial Intelligence
PDF
From MVP to Full-Scale Product A Startup’s Software Journey.pdf
PDF
TrustArc Webinar - Click, Consent, Trust: Winning the Privacy Game
PPTX
Benefits of Physical activity for teenagers.pptx
PDF
WOOl fibre morphology and structure.pdf for textiles
PDF
Hybrid horned lizard optimization algorithm-aquila optimizer for DC motor
PDF
August Patch Tuesday
PDF
ENT215_Completing-a-large-scale-migration-and-modernization-with-AWS.pdf
PDF
Getting Started with Data Integration: FME Form 101
PPTX
Final SEM Unit 1 for mit wpu at pune .pptx
PPTX
Group 1 Presentation -Planning and Decision Making .pptx
PPTX
MicrosoftCybserSecurityReferenceArchitecture-April-2025.pptx
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PPT
What is a Computer? Input Devices /output devices
PDF
STKI Israel Market Study 2025 version august
PDF
Hybrid model detection and classification of lung cancer
Modernising the Digital Integration Hub
A Late Bloomer's Guide to GenAI: Ethics, Bias, and Effective Prompting - Boha...
A contest of sentiment analysis: k-nearest neighbor versus neural network
Unlock new opportunities with location data.pdf
Zenith AI: Advanced Artificial Intelligence
From MVP to Full-Scale Product A Startup’s Software Journey.pdf
TrustArc Webinar - Click, Consent, Trust: Winning the Privacy Game
Benefits of Physical activity for teenagers.pptx
WOOl fibre morphology and structure.pdf for textiles
Hybrid horned lizard optimization algorithm-aquila optimizer for DC motor
August Patch Tuesday
ENT215_Completing-a-large-scale-migration-and-modernization-with-AWS.pdf
Getting Started with Data Integration: FME Form 101
Final SEM Unit 1 for mit wpu at pune .pptx
Group 1 Presentation -Planning and Decision Making .pptx
MicrosoftCybserSecurityReferenceArchitecture-April-2025.pptx
Assigned Numbers - 2025 - Bluetooth® Document
What is a Computer? Input Devices /output devices
STKI Israel Market Study 2025 version august
Hybrid model detection and classification of lung cancer

ReactJS.pdf

  • 1. CS142 Lecture Notes - ReactJS ReactJS Introduction Mendel Rosenblum
  • 2. CS142 Lecture Notes - ReactJS ReactJS ● JavaScript framework for writing the web applications ○ Like AngularJS - Snappy response from running in browser ○ Less opinionated: only specifies rendering view and handling user interactions ● Uses Model-View-Controller pattern ○ View constructed from Components using pattern ○ Optional, but commonly used HTML templating ● Minimal server-side support dictated ● Focus on supporting for programming in the large and single page applications ○ Modules, reusable components, testing, etc.
  • 3. CS142 Lecture Notes - ReactJS ReactJS Web Application Page <!doctype html> <html> <head> <title>CS142 Example</title> </head> <body> <div id="reactapp"></div> <script src="./webpackOutput/reactApp.bundle.js"></script> </body> </html> ReactJS applications come as a JavaScript blob that will use the DOM interface to write the view into the div.
  • 4. CS142 Lecture Notes - ReactJS ReactJS tool chain Babel - Transpile language features (e.g. ECMAScript, JSX) to basic JavaScript Webpack - Bundle modules and resources (CSS, images) Output loadable with single script tag in any browser Component #1 Component #2 Component #N ... Babel Babel Babel Webpack Output Bundle.js React.js React Components
  • 5. CS142 Lecture Notes - ReactJS reactApp.js - Render element into browser DOM import React from 'react'; import ReactDOM from 'react-dom'; import ReactAppView from './components/ReactAppView'; let viewTree = React.createElement(ReactAppView, null); let where = document.getElementById('reactapp'); ReactDOM.render(viewTree, where); Renders the tree of React elements (single component named ReactAppView) into the browser's DOM at the div with id=reactapp. ES6 Modules - Bring in React and web app React components.
  • 6. CS142 Lecture Notes - ReactJS components/ReactAppView.js - ES6 class definition import React from 'react'; class ReactAppView extends React.Component { constructor(props) { super(props); ... } render() { ... }; export default ReactAppView; Require method render() - returns React element tree of the Component's view. Inherits from React.Component. props is set to the attributes passed to the component.
  • 7. CS142 Lecture Notes - ReactJS ReactAppView render() method render() { let label = React.createElement('label', null,'Name: '); let input = React.createElement('input', { type: 'text', value: this.state.yourName, onChange: (event) => this.handleChange(event) }); let h1 = React.createElement('h1', null, 'Hello ', this.state.yourName, '!'); return React.createElement('div', null, label, input, h1); } Returns element tree with div (label, input, and h1) elements <div> <label>Name: </label> <input type="text" … /> <h1>Hello {this.state.yourName}!</h1> </div>
  • 8. CS142 Lecture Notes - ReactJS ReactAppView render() method w/o variables render() { return React.createElement('div', null, React.createElement('label', null,'Name: '), React.createElement('input', { type: 'text', value: this.state.yourName, onChange: (event) => this.handleChange(event) }), React.createElement('h1', null, 'Hello ', this.state.yourName, '!') ); }
  • 9. CS142 Lecture Notes - ReactJS Use JSX to generate calls to createElement render() { return ( <div> <label>Name: </label> <input type="text" value={this.state.yourName} onChange={(event) => this.handleChange(event)} /> <h1>Hello {this.state.yourName}!</h1> </div> ); } ● JSX makes building tree look like templated HTML embedded in JavaScript.
  • 10. CS142 Lecture Notes - ReactJS Component state and input handling import React from 'react'; class ReactAppView extends React.Component { constructor(props) { super(props); this.state = {yourName: ""}; } handleChange(event) { this.setState({ yourName: event.target.value }); } .... ● Input calls to setState which causes React to call render() again Make <h1>Hello {this.state.yourName}!</h1> work
  • 11. CS142 Lecture Notes - ReactJS One way binding: Type 'D' Character in input box ● JSX statement: <input type="text" value={this.state.yourName} onChange={(event) => this.handleChange(event)} /> Triggers handleChange call with event.target.value == "D" ● handleChange - this.setState({yourName: event.target.value}); this.state.yourName is changed to "D" ● React sees state change and calls render again: ● Feature of React - highly efficient re-rendering
  • 12. CS142 Lecture Notes - ReactJS Calling React Components from events: A problem class ReactAppView extends React.Component { ... handleChange(event) { this.setState({ yourName: event.target.value }); } ... } Understand why: <input type="text" value={this.state.yourName} onChange={this.handleChange} /> Doesn't work!
  • 13. CS142 Lecture Notes - ReactJS Calling React Components from events workaround ● Create instance function bound to instance class ReactAppView extends React.Component { constructor(props) { super(props); this.state = {yourName: ""}; this.handleChange = this.handleChange.bind(this); } handleChange(event) { this.setState({ yourName: event.target.value }); }
  • 14. CS142 Lecture Notes - ReactJS Calling React Components from events workaround ● Using public fields of classes with arrow functions class ReactAppView extends React.Component { constructor(props) { super(props); this.state = {yourName: ""}; } handleChange = (event) => { this.setState({ yourName: event.target.value }); } ...
  • 15. CS142 Lecture Notes - ReactJS Calling React Components from events workaround ● Using arrow functions in JSX class ReactAppView extends React.Component { … handleChange(event) { this.setState({ yourName: event.target.value }); } render() { return ( <input type="text" value={this.state.yourName} onChange={(event) => this.handleChange(event)} /> ); }
  • 16. CS142 Lecture Notes - ReactJS A digression: camelCase vs dash-case Word separator in multiword variable name ● Use dashes: active-buffer-entry ● Capitalize first letter of each word: activeBufferEntry Issue: HTML is case-insensitive but JavaScript is not. ReactJS's JSX has HTML-like stuff embedded in JavaScript. ReactJS: Use camelCase for attributes AngularJS: Used both: dashes in HTML and camelCase in JavaScript!
  • 17. CS142 Lecture Notes - ReactJS Programming with JSX ● Need to remember: JSX maps to calls to React.createElement ○ Writing in JavaScript HTML-like syntax that is converted to JavaScript function calls ● React.createElement(type, props, ...children); ○ type: HTML tag (e.g. h1, p) or React.Component ○ props: attributes (e.g. type="text") Uses camelCase! ○ children: Zero or more children which can be either: ■ String or numbers ■ A React element ■ An Array of the above
  • 18. CS142 Lecture Notes - ReactJS JSX templates must return a valid children param ● Templates can have JavaScript scope variables and expressions ○ <div>{foo}</div> ■ Valid if foo is in scope (i.e. if foo would have been a valid function call parameter) ○ <div>{foo + 'S' + computeEndingString()}</div> ■ Valid if foo & computeEndString in scope ● Template must evaluate to a value ○ <div>{if (useSpanish) { … } }</div> - Doesn't work: if isn't an expression ○ Same problem with "for loops" and other JavaScript statements that don't return values ● Leads to contorted looking JSX: Example: Anonymous immediate functions ○ <div>{ (function() { if …; for ..; return val;})() }</div>
  • 19. CS142 Lecture Notes - ReactJS Conditional render in JSX ● Use JavaScript Ternary operator (?:) <div>{this.state.useSpanish ? <b>Hola</b> : "Hello"}</div> ● Use JavaScript variables let greeting; const en = "Hello"; const sp = <b>Hola</b>; let {useSpanish} = this.prop; if (useSpanish) {greeting = sp} else {greeting = en}; <div>{greeting}</div>
  • 20. CS142 Lecture Notes - ReactJS Iteration in JSX ● Use JavaScript array variables let listItems = []; for (let i = 0; i < data.length; i++) { listItems.push(<li key={data[i]}>Data Value {data[i]}</li>); } return <ul>{listItems}</ul>; ● Functional programming <ul>{data.map((d) => <li key={d}>Data Value {d}</li>)}</ul> key= attribute improves efficiency of rendering on data change
  • 21. CS142 Lecture Notes - ReactJS Styling with React/JSX - lots of different ways import React from 'react'; import './ReactAppView.css'; class ReactAppView extends React.Component { … render() { return ( <span className="cs142-code-name"> ... </span> ); Webpack can import CSS style sheets: .cs142-code-name { font-family: Courier New, monospace; } Must use className= for HTML class= attribute (JS keyword conflict)
  • 22. CS142 Lecture Notes - ReactJS Component lifecycle and methods http://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/
  • 23. CS142 Lecture Notes - ReactJS Example of lifecycle methods - update UI every 2s class Example extends React.Component { ... componentDidMount() { // Start 2 sec counter const incFunc = () => this.setState({ counter: this.state.counter + 1 }); this.timerID = setInterval(incFunc, 2 * 1000); } componentWillUnmount() { // Shutdown timer clearInterval(this.timerID); } ...
  • 24. CS142 Lecture Notes - ReactJS Stateless Components ● React Component can be function (not a class) if it only depends on props function MyComponent(props) { return <div>My name is {props.name}</div>; } Or using destructuring... function MyComponent({name}) { return <div>My name is {name}</div>; } ● React Hooks (https://reactjs.org/docs/hooks-intro.html) ○ Add state to stateless components - can do pretty much everything the class method can
  • 25. CS142 Lecture Notes - ReactJS Example React Hooks import React, { useState, useEffect } from 'react'; function Example() { const [count, setCount] = useState(0); useEffect(() => { document.title = `You clicked ${count} times`; }); return ( <div> <p>You clicked {count} times</p> <button onClick={() => setCount(count + 1)}> Click me </button> </div> ); }
  • 26. CS142 Lecture Notes - ReactJS Communicating between React components ● Passing information from parent to child: Use props (attributes) <ChildComponent param={infoForChildComponent} /> ● Passing information from child to parent: Callbacks this.parentCallback = (infoFromChild) => { /* processInfoFromChild */}; <ChildComponent callback={this.parentCallback}> /> ● React Context (https://reactjs.org/docs/context.html) ○ Global variables for subtree of components