React DevTools adds a feature to trigger an error boundary, making testing easierA new enhancement in React DevTools provides a toggle error button to test Error Boundaries.
Normalizing Redux state to ensure good performance in React appsIn complex applications, client apps have to store and manage a large amount of nested data, and if the data is not normalized, it can be incredibly time-consuming for a program to lookup nested data which could become a performance concern.
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.