Keep the React app responsive even during large screen updates with startTransition API introduced in React 18The 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 SuspenseReact 18 delays committing everything inside the Suspense boundary (the suspended component and all its siblings) until the suspended data resolves.
React 18 adds automatic batchingReact 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 nodeReact 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 transformReact 17 introduces jsx-runtime and jsx-dev-runtime that enables the user to write JSX without importing React.
React 17 runs useEffect cleanup functions asynchronouslyReact 17 executes useEffect cleanup functions asynchronously, improving the performance of large applications.
Redux 4.1.0 converts error messages from strings to error code indexesRedux 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 eventsReact'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 SyntheticEventStarting with React 17, KeyboardEvent.code property is available on React keyboard event.