Keep the React app responsive even during large screen updates with startTransition API introduced in React 18

The newly introduced startTransition API helps to improve the user interactions by categorizing the state updates as urgent and non-urgent.

React 18 improves the existing behavior of Suspense

React 18 delays committing everything inside the Suspense boundary (the suspended component and all its siblings) until the suspended data resolves.

React 18 adds automatic batching

React 18 adds out-of-the-box performance improvements by doing more batching by default.

React 18 introduces new root API ( ReactDOM.createRoot )

React 18 adds the new root API that comes up with the new out-of-the-box improvements.

React 17 attaches events to the root DOM container instead of the document node

React 17 delegates events to the root node instead of the document node, making it easier to embed React into apps built with other technologies

React 17 introduces new JSX transform

React 17 introduces jsx-runtime and jsx-dev-runtime that enables the user to write JSX without importing React.

React 17 runs useEffect cleanup functions asynchronously

React 17 executes useEffect cleanup functions asynchronously, improving the performance of large applications.

Redux 4.1.0 converts error messages from strings to error code indexes

Redux 4.1.0 extracts error messages from production build, converts them into error code indexes, thereby shrinking the bundle size.

React 17 internally uses the browser's focusin and focusout events for onFocus and onBlur events

React's onFocus and onBlur events have switched to using the native focusin and focusout events under the hood.

React 17 adds support for KeyboardEvent.code property to SyntheticEvent

Starting with React 17, KeyboardEvent.code property is available on React keyboard event.