React 17.0 有什么变化?
React 17.0 的主要更新包括移除不安全生命周期方法、引入新根节点 API、优化事件处理系统和改进 JSX 转换。
React 17.0 虽然没有引入重大的新功能,但主要为未来更新(如 React 18)作准备。该版本包含以下核心变化:
-
移除或不建议使用不安全的生命周期方法: React 17 移除了组件生命周期中类似
componentWillReceiveProps
和componentWillUpdate
的方法,原因是它们行为不稳定且易导致 bugs。取而代之的是更安全的替代方法如getDerivedStateFromProps
和getSnapshotBeforeUpdate
。这鼓励开发者转向函数式组件结合 Hooks 的模式,以提高代码可维护性。 - 引入新根节点 API: 为促进未来并发渲染功能的逐步采用,React 17 引入了新渲染入口点。例如,建议使用
ReactDOM.createRoot()
替换传统的ReactDOM.render()
,允许更优化的异步渲染。示例代码:// 旧方式 import ReactDOM from 'react-dom'; ReactDOM.render(<App />, document.getElementById('root')); // 新方式 (推荐) import { createRoot } from 'react-dom/client'; const root = createRoot(document.getElementById('root')); root.render(<App />);
-
优化事件处理系统: React 17 移除事件池(event pooling)功能,以避免异步代码中的事件数据丢失问题,并提升事件处理稳定性。此外,委托事件系统的根节点变化至整个文档
document
级别,减少事件冲突。 - JSX 转换改进: 允许使用 JSX 语法而无需在每个文件导入
React
,提升了开发便利性(需配合打包器如 Babel v7.4 及以上)。