React Native项目中应当如何正确导入React及相关Hook?
React Native 中 React 导入方式选择说明
首先明确核心前提:React 17 及以上版本推出了新的 JSX 转换机制,编译 JSX 不再依赖显式导入的 React 对象,导入方式的差异主要和你项目是否开启该机制、是否需要使用 React 顶层 API 有关。
场景1:需要使用 useState 等 Hook 或其他 React 顶层 API
四个可选写法的优劣/可用性如下:
import React, { useState } from 'react';:全兼容写法,无论你的项目是否开启新 JSX 转换都可正常运行,是使用频率最高的通用写法。import { useState } from 'react';:仅支持开启了新 JSX 转换的项目(React Native 0.64+ 默认开启),写法更简洁,如果你不需要直接调用React根对象上的其他方法,可优先选用。import * as React from 'react';:全兼容写法,会将所有 React 导出的内容挂载到React命名空间下,使用 Hook 时需写为React.useState,更适合 TypeScript 项目需要统一引用 React 类型的场景。import * from 'react';:不符合 ES 模块规范的错误写法,任何场景下都无法正常使用。
场景2:不需要使用任何 Hook 或 React 顶层 API
四个可选写法的优劣/可用性如下:
import React from 'react';:React 17 之前的标准兼容写法,适用于未开启新 JSX 转换的旧项目,可保证 JSX 编译后调用React.createElement时不报错。import 'react';:仅导入模块副作用,不会将 React 引入当前作用域,未开启新 JSX 转换的项目会直接报错,即使开启了该机制也没有实际作用,不推荐使用。import * as React from 'react';:全兼容写法,适用场景和场景1一致,后续需要新增 Hook 时不需要修改导入语句,改造成本低。import * from 'react';:错误写法,任何场景都不支持。
补充说明:当前主流的 React Native 0.64 及以上版本均默认搭载 React 17+ 且开启新 JSX 转换,无旧版本兼容需求时可直接选用更简洁的写法。
内容的提问来源于stack exchange,提问作者TacoSnack
相关产品推荐
相关产品推荐

