Lessons cleanup: grammar, factual accuracy, code bugs, hygiene - #183
Conversation
Lessons (00_*–12_*): - Grammar pass across all lessons: Spanish-calque "if not, ..." rewritten to "but rather, ...", "in deep" → "in depth", "Programing" → "Programming", "cristal" → "crystal", "componenDidMount" → "componentDidMount", "patten" → "pattern", "thorugh" → "through", "advice" → "advise", "you/your", "an example/an particularly", "ouput/outpout" → "output", "remember you" → "remind you", "What is Destructure" → "Destructuring", "Name export" → "Named export", and many similar typo/copy-edit fixes. - 06_lifecycle-events.md: replaced the conflated single "Order of execution" list with three phases — Mounting, Updating, Unmounting. Removed componentWillUnmount from the deprecated list (it is not deprecated) and renamed the deprecated entries to their UNSAFE_* form. - 02_0_components.md: replaced the "functional components perform better" claim with the real reasons to prefer them (hooks API, no this-binding, less boilerplate, easier composition). Switched the naming guidance to PascalCase / camelCase. Closed unclosed JSX tags in the Composition example. Added missing `import React from 'react'` to the HOC example. - 02_1_props.md: copy state before sorting (`[...this.state.users].sort(...)`) to avoid mutating it; wrapped the `<li>` map output in a `<ul>`; added a modern-React note about preferring componentDidUpdate / useEffect over the setState callback. - 03_local-state.md: clarified setState shallow merge with a nested-object example; rewrote the bind(null, ...) explanation to cover strict-mode this and the lexically-bound class field arrow function. - 01_1_elements.md: corrected createElement signature to variadic children; rewrote "object representation of a DOM node" to cover components too; declared HelloWorld with const. - 05_controlled-components.md: clarified that the form-fields-in-URL behavior only happens with method="GET"; POST puts them in the body. - 08_redux.md: distinguished currying from partial application; fixed the count of nested functions in the example note; added `compose` to the `redux` import where the snippet referenced it; addToTotal now uses its `amount` argument (was hardcoded to 10); functional App now returns its JSX (was a no-return statement body); added a note clarifying that the duplication-on-dispatch is intentional for the demo, not how a real reducer should be written; moved .env guidance to the project root and recommended excluding it from git. - 09_packages.md: rewrote the contradictory PropTypes "we should not / we can choose" sentence; added the missing `import axios from 'axios'`; fixed the bogus `type: FETCH_WEATHER` to FETCH_COMMENTS; added a heads-up that redux-promise is archived and pointing to redux-thunk / Redux Toolkit. - 11_webpack.md: added missing comma in splitChunks cacheGroups vendor; prefere → orderPreference (real express-static-gzip option name); fixed `srcimages/` and `'.images/...'` to `src/images/` and './images/'; '@babel/react' → '@babel/preset-react' for consistency with .babelrc; dropped the unused `App` from the './app' import; promoted "##From..." to a real heading; misc typos (webpackHotMiddleware, npm start, Standardization, configuration, within, etc.). - 00_3_intro_es2015.md: declared addFriendsAge with const so the reduce example actually works in strict mode (was an implicit-global). Repository hygiene: - README.md: removed dead Greenkeeper badge; added a grouped Table of Contents linking to every lesson (Intro / Getting started / Components & data / Ecosystem); rewrote the Pre-requisites paragraph as a clear bulleted list of the JS knowledge expected before starting. - 00_1_intro_JS.md: appended two new sections (Primitive and reference types; Coercion) inlined from the standalone notesToPlace files. - Deleted notesToPlace.md and notesToPlace_primitive-and-reference-types.md (content moved into 00_1_intro_JS.md). - Deleted .whitesource and greenkeeper.json: Greenkeeper shut down in 2020, and greenkeeper.json referenced example folders that no longer exist. - .gitignore: changed `/node_modules` to `node_modules/` so it applies recursively to every example sub-project; collapsed the .env.local / .env.development.local list to a single `.env.*` glob with `!.env.example` allow-list; added `dist/` to the build output rule. - LICENSE: updated `Copyright (c) 2018 React` to `2018-2026 Al Diaz`.
There was a problem hiding this comment.
Actionable comments posted: 9
🧹 Nitpick comments (1)
09_packages.md (1)
6-6: 💤 Low valueMinor grammar improvement.
The phrase "works just in
development" is slightly awkward. Consider "works only indevelopment" or "is active only indevelopment" for clearer phrasing.✏️ Suggested wording improvement
-This dependency works just in `development`. +This dependency is active only in `development`.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@09_packages.md` at line 6, Update the sentence "This dependency works just in `development`" to clearer wording such as "This dependency works only in `development`" or "This dependency is active only in `development`" so the intent is grammatically unambiguous; replace the existing phrase in the same line accordingly.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@00_0_intro.md`:
- Line 5: Update the time reference in the sentence that currently reads "More
than 5 years have passed since React´s official release (*Facebook - March
2013*);" to a date-stable phrasing such as "over a decade since React's official
release (March 2013)" or "since March 2013" so the statement remains accurate;
edit the sentence text in 00_0_intro.md (the line containing that exact
sentence) to replace "More than 5 years" with your chosen stable phrase and
ensure punctuation/formatting around "React's official release (March 2013)" is
consistent.
- Line 5: Replace the non-standard acute accent character (´) used in
contractions with the standard ASCII apostrophe (') in the text snippets such as
"More than 5 years have passed since React´s official release" and other
occurrences like "It's" so they read "React's" and "It's"; search for the
visible incorrect characters (´) in the document and normalize them to the
proper apostrophe throughout.
In `@02_0_components.md`:
- Line 9: Update the wording that currently says "use camelCase for DOM
elements" to instruct using lowercase tags for intrinsic JSX elements (e.g.,
`<div>`, `<section>`), while keeping camelCase guidance for HOC/HOF and methods
like `ListOfRecords`/function names; ensure the example line (`<ListOfRecords
/>`) remains as a component example and clarify that intrinsic DOM tags should
be lowercase.
In `@03_local-state.md`:
- Line 218: Update the explanation about .bind: change the statement that in
strict mode `this` becomes `undefined` to say it becomes `null` when using
`.bind(null)` on a regular function, while keeping the existing arrow-function
caveat for deleteFriend (the class field arrow function) intact; ensure the text
references that the "new function" returned by `.bind()` has its `this` set to
the first argument (`null` here) and that in this example bind is really used to
pre-fill the first argument ('Wendy').
In `@05_controlled-components.md`:
- Line 179: The note uses an inconsistent state reference: change the example
text that says value={yourName} to use the same form as the rest of the examples
(this.state.yourName) or explicitly mention destructuring if you prefer
value={yourName} after const { yourName } = this.state; — update the phrase in
the Debounce note to reference this.state.yourName (or add a short clause about
destructuring) so it matches the surrounding examples and avoids confusion.
- Line 31: The markdown currently shows the component name as raw HTML; wrap the
component token <App /> in inline code backticks (i.e., render it as `<App />`)
so Markdown treats it as code text rather than an HTML element—update the text
that references the App component accordingly.
- Line 68: Replace the incorrect acute-accent character (´, U+00B4) with a
standard ASCII apostrophe (', U+0027) for the occurrences of the words "user´s",
"there´s", and "Community´s" in the document (search for those exact tokens and
replace to "user's", "there's", "Community's"); also scan the rest of the file
for any other instances of U+00B4 and replace them with the ASCII apostrophe to
ensure consistent typography.
In `@06_lifecycle-events.md`:
- Around line 14-18: Update the "Updating" section to clarify that forceUpdate()
is an update trigger but it bypasses shouldComponentUpdate(nextProps,
nextState): keep the listed sequence (getDerivedStateFromProps →
shouldComponentUpdate → render) but add a short parenthetical or sentence after
shouldComponentUpdate stating that when forceUpdate() is used on a class
component, React skips shouldComponentUpdate and proceeds to render(), and
reference the methods by name (forceUpdate, shouldComponentUpdate,
getDerivedStateFromProps, render) so readers can locate the behavior quickly.
In `@10_unit-tests.md`:
- Line 261: The docs show malformed examples for the test hooks; update the
snippet so both beforeEach and afterEach are complete, syntactically correct
callbacks by changing the text to include the full expressions beforeEach(() =>
{}) and afterEach(() => {}); locate the instances referencing
beforeEach/afterEach (the doc line with "beforeEach(() => {} and afterEach(() =>
{}") and replace them with the balanced forms so readers see beforeEach(() =>
{}) and afterEach(() => {}).
---
Nitpick comments:
In `@09_packages.md`:
- Line 6: Update the sentence "This dependency works just in `development`" to
clearer wording such as "This dependency works only in `development`" or "This
dependency is active only in `development`" so the intent is grammatically
unambiguous; replace the existing phrase in the same line accordingly.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 1c5edffe-c3c7-4616-a438-5cd9ecf3f5fe
📒 Files selected for processing (25)
.gitignore.whitesource00_0_intro.md00_1_intro_JS.md00_2_intro_JS-patterns.md00_3_intro_es2015.md01_0_starting.md01_1_elements.md01_2_JS-module-systems.md02_0_components.md02_1_props.md03_local-state.md05_controlled-components.md06_lifecycle-events.md07_conditional-rendering.md08_redux.md09_packages.md10_unit-tests.md11_webpack.md12_full-client-app.mdLICENSEREADME.mdgreenkeeper.jsonnotesToPlace.mdnotesToPlace_primitive-and-reference-types.md
💤 Files with no reviewable changes (4)
- notesToPlace.md
- .whitesource
- greenkeeper.json
- notesToPlace_primitive-and-reference-types.md
- 03_local-state.md: correct `.bind(null)` strict-mode claim — `this` is
`null`, not `undefined` (only implicit `this` is coerced; explicit bind
passes the value through verbatim).
- 06_lifecycle-events.md: note that `forceUpdate()` bypasses
`shouldComponentUpdate()` in the Updating phase.
- 02_0_components.md: clarify intrinsic JSX tags are lowercase (`<div>`,
`<section>`); camelCase applies to handlers / methods / prop names,
not DOM tag names.
- 10_unit-tests.md: balance the `beforeEach(() => {})` and
`afterEach(() => {})` parens in the example note.
- 00_0_intro.md: replace stale "More than 5 years" with date-stable
"Since React's official release (March 2013), …".
- 05_controlled-components.md: wrap `<App />` reference in backticks;
align Debounce note state reference with surrounding examples
(this.state.yourName).
- 09_packages.md: "works just in development" → "works only in development".
- All lessons + README: typography pass replacing the acute accent
(´, U+00B4) with a standard ASCII apostrophe (') in every
contraction/possessive (`React´s` → `React's`, `It´s` → `It's`,
`don´t` → `don't`, etc.). Verified zero U+00B4 remain.
There was a problem hiding this comment.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
11_webpack.md (1)
2082-2090:⚠️ Potential issue | 🟠 Major | ⚡ Quick win
vendorcache group needs atestproperty to explicitly targetnode_modules.Without a
testmatcher,minChunks: 2will capture any module shared across chunks—including app code—rather than specifically vendor libraries. Webpack's official documentation recommends usingtest: /[\\/]node_modules[\\/]/to isolate third-party dependencies.Suggested adjustment
cacheGroups: { vendor: { + test: /[\\/]node_modules[\\/]/, + name: 'vendors', filename: '[name].bundle.js', chunks: 'initial', - minChunks: 2 + minChunks: 1 } }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@11_webpack.md` around lines 2082 - 2090, The vendor cacheGroup in optimization.splitChunks currently lacks a test matcher and so minChunks: 2 can pull shared app modules; update the vendor cacheGroup (named "vendor" inside optimization.splitChunks.cacheGroups) to add an explicit test property that matches node_modules (e.g., the standard /[\\/]node_modules[\\/]/ regex) so only third‑party dependencies are targeted while keeping filename, chunks and minChunks as-is.
🧹 Nitpick comments (2)
11_webpack.md (1)
99-113: ⚡ Quick winConvert app.js to ESM export to match the ESM import on line 99.
The snippet on line 99 uses ESM named import (
import { someFunction } from './app') while the accompanyingapp.jssnippet exports via CommonJS (module.exports.someFunction). Per webpack documentation, named exports cannot be imported from CommonJS modules—only the default export is available. This mixed style will fail or behave unexpectedly depending on webpack configuration and toolchain.Suggested doc fix
import { someFunction } from './app'; // app.js console.log('app.js'); -module.exports.someFunction = () => { +export const someFunction = () => { console.log('app.js > someFunction'); };🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@11_webpack.md` around lines 99 - 113, The import in index.js uses a named ESM import (import { someFunction } from './app') but app.js currently uses CommonJS (module.exports.someFunction); change app.js to use a named ESM export that matches the import (e.g., export function someFunction(...) or export const someFunction = ...) so the symbol someFunction is a proper named export for ESM consumers and the import { someFunction } from './app' will resolve correctly.README.md (1)
53-53: ⚡ Quick winShorten "during the course of" for clarity.
The phrase "during the course of" is unnecessarily wordy. Consider replacing it with "throughout" or "during" for better readability.
✂️ Proposed simplification
-This is a pure practical guide (*ps*, it was at the beginning): please, keep the `practical intention` present during the course of these "shared notes"; I don't have the intent of challenging the great and plentiful coaching classes, nor the books/"white papers" that today, you can easily find anywhere (starting with Facebook's own proprietary documentation). +This is a pure practical guide (*ps*, it was at the beginning): please, keep the `practical intention` present throughout these "shared notes"; I don't have the intent of challenging the great and plentiful coaching classes, nor the books/"white papers" that today, you can easily find anywhere (starting with Facebook's own proprietary documentation).As per coding guidelines, static analysis identified this as potentially wordy (EN_WORDINESS_PREMIUM_DURING_THE_COURSE_OF).
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@README.md` at line 53, Replace the wordy phrase "during the course of" in the sentence that reads "please, keep the `practical intention` present during the course of these "shared notes"" with a concise alternative such as "during" or "throughout" so the line becomes "...keep the `practical intention` present during these 'shared notes'" (or "...throughout these 'shared notes'"), preserving punctuation and emphasis formatting.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@11_webpack.md`:
- Line 2420: The markdown fenced code block at the shown closing fence (the
triple backticks ``` without a language) is missing a language tag; update the
opening fence for that block to include an appropriate language identifier
(e.g., ```json or ```bash) so the block conforms to markdownlint MD040 and
enables proper syntax highlighting.
- Line 1002: The walkthrough incorrectly references "src/package.json"; update
any occurrences that instruct moving Jest config from "src/package.json" to
"config/jest/jest.config.json" so they instead reference the repository root
"package.json" (i.e., change "src/package.json" → "package.json") and ensure the
step clearly states moving the Jest config into "config/jest/jest.config.json".
---
Outside diff comments:
In `@11_webpack.md`:
- Around line 2082-2090: The vendor cacheGroup in optimization.splitChunks
currently lacks a test matcher and so minChunks: 2 can pull shared app modules;
update the vendor cacheGroup (named "vendor" inside
optimization.splitChunks.cacheGroups) to add an explicit test property that
matches node_modules (e.g., the standard /[\\/]node_modules[\\/]/ regex) so only
third‑party dependencies are targeted while keeping filename, chunks and
minChunks as-is.
---
Nitpick comments:
In `@11_webpack.md`:
- Around line 99-113: The import in index.js uses a named ESM import (import {
someFunction } from './app') but app.js currently uses CommonJS
(module.exports.someFunction); change app.js to use a named ESM export that
matches the import (e.g., export function someFunction(...) or export const
someFunction = ...) so the symbol someFunction is a proper named export for ESM
consumers and the import { someFunction } from './app' will resolve correctly.
In `@README.md`:
- Line 53: Replace the wordy phrase "during the course of" in the sentence that
reads "please, keep the `practical intention` present during the course of these
"shared notes"" with a concise alternative such as "during" or "throughout" so
the line becomes "...keep the `practical intention` present during these 'shared
notes'" (or "...throughout these 'shared notes'"), preserving punctuation and
emphasis formatting.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 94a40d80-b224-4064-8812-5e6ad7d5f773
📒 Files selected for processing (19)
00_0_intro.md00_1_intro_JS.md00_3_intro_es2015.md01_0_starting.md01_1_elements.md01_2_JS-module-systems.md02_0_components.md02_1_props.md03_local-state.md04_methods.md05_controlled-components.md06_lifecycle-events.md07_conditional-rendering.md08_redux.md09_packages.md10_unit-tests.md11_webpack.md12_full-client-app.mdREADME.md
✅ Files skipped from review due to trivial changes (6)
- 04_methods.md
- 07_conditional-rendering.md
- 12_full-client-app.md
- 01_1_elements.md
- 00_3_intro_es2015.md
- 06_lifecycle-events.md
🚧 Files skipped from review as they are similar to previous changes (3)
- 01_0_starting.md
- 01_2_JS-module-systems.md
- 05_controlled-components.md
- 11_webpack.md: fix two stale `src/package.json` references — both
steps actually mean the project-root `package.json` (CRA stores
package.json at the root, not under `src/`).
- 11_webpack.md: add a `test: /[\\/]node_modules[\\/]/` matcher to the
`vendor` cacheGroup, plus a `name`. Without `test`, `minChunks: 2`
would also capture app modules shared between chunks. Lowered
`minChunks` to 1 (canonical webpack guidance for vendor isolation)
and added a one-line note explaining the matcher.
- 11_webpack.md: convert `app.js` from `module.exports.someFunction`
to `export const someFunction = …` so it matches the ESM named
import in `index.js` (`import { someFunction } from './app'`); a
named CommonJS export is not reliably importable as a named ESM
symbol.
- 11_webpack.md: tag the previously bare ```` ``` ```` fence around
the `build:server:flex` script with `json` (markdownlint MD040).
- README.md: "during the course of these shared notes" → "throughout
these shared notes" (drop wordy phrasing).
There was a problem hiding this comment.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
11_webpack.md (1)
2494-2496:⚠️ Potential issue | 🟠 Major | ⚡ Quick winAdd explicit script argument to
nodemondev command.The
nodemoncommand in this dev script is missing the server script to execute. Without it, nodemon will attempt to find a default from the package.jsonmainproperty orscripts.startfield. According to nodemon documentation, when using--watchoptions, the script should be explicitly specified and placed after the watch options.Suggested patch
-"dev":"cross-env NODE_ENV=development nodemon --watch config --watch server", +"dev":"cross-env NODE_ENV=development nodemon --watch config --watch server server/index.js",🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@11_webpack.md` around lines 2494 - 2496, The "dev" npm script currently runs `cross-env NODE_ENV=development nodemon --watch config --watch server` without specifying the server entrypoint; update the "dev" script (the package.json "dev" key) to include the explicit server script argument (for example your server entry file like server/index.js or server.js) placed after the `--watch` options so nodemon runs that file (keep the `cross-env NODE_ENV=development` and the `--watch config --watch server` flags and add the entrypoint after them).
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@11_webpack.md`:
- Around line 1150-1154: The dev script in package.json currently points to
"src/server/index.js" which will cause a module-not-found error; update the
"dev" script value to use the documented server entrypoint "server/index.js"
(i.e., change the package.json "dev" script from node src/server/index.js to
node server/index.js) so the project starts with the same entry used throughout
the walkthrough.
- Around line 2424-2426: Update the npm script named "build:server:flex" to run
the server bundle with NODE_ENV set to production using cross-env; specifically,
modify the script invocation so cross-env sets NODE_ENV=production before
launching nodemon (keep the existing nodemon, --watch build and
build/server-prod-bundle.js arguments and the script name "build:server:flex"
unchanged) to ensure runtime branches reading process.env.NODE_ENV behave like
production.
---
Outside diff comments:
In `@11_webpack.md`:
- Around line 2494-2496: The "dev" npm script currently runs `cross-env
NODE_ENV=development nodemon --watch config --watch server` without specifying
the server entrypoint; update the "dev" script (the package.json "dev" key) to
include the explicit server script argument (for example your server entry file
like server/index.js or server.js) placed after the `--watch` options so nodemon
runs that file (keep the `cross-env NODE_ENV=development` and the `--watch
config --watch server` flags and add the entrypoint after them).
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: cca396fe-66f0-4e33-8f03-4fce4873a39c
📒 Files selected for processing (2)
11_webpack.mdREADME.md
✅ Files skipped from review due to trivial changes (1)
- README.md
All three findings are in 11_webpack.md npm script snippets:
- Line 1153 — `"dev": "node src/server/index.js"` → `"dev": "node server/index.js"`.
The walkthrough creates `server/` at the project root (not under `src/`),
so the original path would module-not-found. Last round I corrected the
surrounding prose ("project-root package.json") but left the script body
stale; this finishes the fix.
- Line 2425 — `build:server:flex` is run against the production server
bundle, so it needs `NODE_ENV=production`. Added `cross-env
NODE_ENV=production` to the existing nodemon invocation. Server logic
branching on `process.env.NODE_ENV` would otherwise see `undefined`.
- Line 2495 — `"dev": "cross-env NODE_ENV=development nodemon --watch config --watch server"`
is missing the entrypoint after the watch options; nodemon would fall
back to package.json `main`. Added `server/index.js` after the watches
so it runs the same entry used elsewhere in the chapter.
Summary
Comprehensive cleanup pass over the lesson markdown files (
00_*–12_*), the README, and the repository config files. No content was added; existing lessons were corrected and tightened. Every change is verifiable against current React/Redux/JS docs.Lessons (00_–12_)
06_lifecycle-events.md— replaced the conflated single "Order of execution" list with three separate phases (Mounting, Updating, Unmounting). RemovedcomponentWillUnmount()from the deprecated list (it is not deprecated) and renamed the actually-deprecated entries to theirUNSAFE_*form.02_0_components.md— replaced the "functional components perform better" claim with the real reasons to prefer them (hooks API, nothis-binding, less boilerplate, easier composition). Switched the naming guidance to PascalCase / camelCase. Closed unclosed JSX tags in the Composition example. Added the missingimport React from 'react'to the HOC example.02_1_props.md— copy state before sorting ([...this.state.users].sort(...)) to avoid mutating it; wrapped the<li>map output in a<ul>; added a modern-React note about preferringcomponentDidUpdate/useEffectover thesetStatecallback.03_local-state.md— clarifiedsetStateshallow merge with a nested-object example; rewrote thebind(null, ...)explanation (strict-modethis, lexically-bound class field arrow functions).01_1_elements.md— correctedcreateElementsignature to variadic children; rewrote "object representation of a DOM node" to cover components too; declaredHelloWorldwithconst.05_controlled-components.md— clarified that the form-fields-in-URL behavior only happens withmethod="GET"; POST puts them in the body.08_redux.md— distinguished currying from partial application; fixed the count of nested functions in the example note; addedcomposeto thereduximport where the snippet referenced it;addToTotalnow uses itsamountargument (was hardcoded to10); functionalAppnow returns its JSX (was a no-return statement body); added a note clarifying that the duplication-on-dispatch is intentional for the demo, not how a real reducer should be written; moved.envguidance to the project root and recommended excluding it from git.09_packages.md— rewrote the contradictory PropTypes "we should not / we can choose" sentence; added the missingimport axios from 'axios'; fixed the bogustype: FETCH_WEATHERtoFETCH_COMMENTS; added a heads-up thatredux-promiseis archived and pointing toredux-thunk/ Redux Toolkit.11_webpack.md— added missing comma insplitChunks.cacheGroups.vendor;prefere→orderPreference(realexpress-static-gzipoption name); fixedsrcimages/and'.images/...'tosrc/images/and'./images/...';'@babel/react'→'@babel/preset-react'for consistency with.babelrc; dropped the unusedAppfrom the'./app'import; promoted##From...to a real heading; misc typos (webpackHotMiddleware,npm start, Standardization, configuration, within, etc.).00_3_intro_es2015.md— declaredaddFriendsAgewithconstso thereduceexample actually works in strict mode (was an implicit-global).Repository hygiene
README.md— removed dead Greenkeeper badge; added a grouped Table of Contents linking to every lesson (Intro / Getting started / Components & data / Ecosystem); rewrote the Pre-requisites paragraph as a clear bulleted list of the JS knowledge expected before starting.00_1_intro_JS.md— appended two new sections (Primitive and reference types; Coercion) inlined from the standalonenotesToPlacefiles.notesToPlace.mdandnotesToPlace_primitive-and-reference-types.md(content moved into00_1_intro_JS.md)..whitesourceandgreenkeeper.json— Greenkeeper shut down in 2020, andgreenkeeper.jsonreferenced example folders that no longer exist..gitignore—/node_modules→node_modules/so it applies recursively to every example sub-project; collapsed the.env.local/.env.development.locallist to a single.env.*glob with!.env.exampleallow-list; addeddist/to the build output rule.LICENSE— updatedCopyright (c) 2018 Reactto2018-2026 Al Diaz.Test plan
00_3_intro_es2015.mdreduce,01_1_elements.mdHelloWorld,02_0_components.mdHOC,02_1_props.mdChild + sort,08_redux.mdaddToTotal / functional App,09_packages.mdAxios action creator,11_webpack.mdsplitChunks / express-static-gzip / image import — paste into a sandbox and confirm they parse and run.06_lifecycle-events.md— verify the three-phase listing (Mounting / Updating / Unmounting) matches React class-component docs..gitignoreexcludesnode_modules/everywhere by runninggit statusafter a freshnpm installinside one of theexamples/folders.Summary by CodeRabbit
Documentation
Chores