已开启
feat:同步上游example代码 #69
feat:同步上游example代码 #69
已开启
xiayukun创建于 8月4日
xiayukun
xiayukun
8月4日

feat:同步上游example代码

likedislike
合并受阻
xiayukunxiayukun
8月4日 修改了pull request 的描述
openharmony_ci
openharmony_ci成员
8月4日 评论:

感谢提交 Pull Requests!
Thanks for submitting a pull request.

likedislike
openharmony_ciopenharmony_ci成员
8月4日 添加了label:dco检查成功
cpf-manager
cpf-manager成员8月4日进行代码检视1
example/src/App.tsx
@@ -0,0 +101,4 @@
101+ );
102+});
103+ 
104+export default class App extends Component {
cpf-manager
cpf-manager8月4日评论:

【AI-Review】【严重】【业务功能】【功能实现错误】新增的App.tsx未被入口文件引用,示例代码无法运行

● 问题: 本PR新增了 example/src/App.tsx,但入口文件 example/index.js 第8行仍为 import App from './src/index';,未改为 ./src/App。在整个仓库中搜索 src/App 无任何引用(index.js、harmony目录均未引用),该文件为死代码。本PR关联的issue #40 标题为"完善example示例",但新增的完整示例(含constant/sync/async/hooks四个Tab页和60+设备信息API演示)不会被加载执行。

● 影响: 严重。运行example应用时仍执行旧的 src/index.tsx(仅展示BundleId/Version/Brand等十余个字段的精简版),新增的完整示例代码无法运行,issue #40 的需求未实现。

● 建议: 将 example/index.js 第8行的导入路径从 './src/index' 改为 './src/App',使新增的App组件成为应用入口;或将App.tsx的内容合并到index.tsx中替换原有实现。

likedislike
cpf-manager
cpf-manager成员8月4日进行代码检视1
example/src/App.tsx
@@ -0,0 +215,4 @@
215+ async componentDidMount() {
216+ let deviceJSON = {};
217+ 
218+ try {
cpf-manager
cpf-manager8月4日评论:

【AI-Review】【一般】【基础代码问题】【稳定性问题】单个try/catch包裹全部异步调用,任一API异常导致后续API全部跳过

● 问题: componentDidMount(第215行)中第218-304行用一个try/catch包裹了从 getUniqueId() 到 getSupportedMediaTypeList() 共60+个异步API调用。当其中任一调用抛出异常时(例如 syncUniqueId() 在第220行调用 RNDeviceInfo.syncUniqueId(),而 RNDeviceInfo 由 TurboModuleRegistry.getEnforcing 获取,native模块未就绪时会抛异常),控制流直接跳到第302行的catch块,第221-294行之间的所有后续API调用均不会执行。对比第295-301行的 getDeviceToken() 单独包了内层try/catch,说明开发者已知部分API可能抛异常,但未对其他API做同样保护。

● 影响: 一般。在OpenHarmony平台上,若某个设备信息API的native实现未就绪或抛出异常,asyncdeviceinfo 将缺失该API之后的所有字段,用户在async Tab页看到的数据不完整。

● 建议: 对每个可能抛出异常的API调用单独try/catch,或使用 Promise.allSettled 并行执行并收集每个调用的结果与异常,确保单个API失败不影响其他API的数据采集。

likedislike
cpf-manager
cpf-manager成员8月4日进行代码检视1
example/src/App.tsx
@@ -0,0 +216,4 @@
216+ let deviceJSON = {};
217+ 
218+ try {
219+ deviceJSON.uniqueId = await getUniqueId();
cpf-manager
cpf-manager8月4日评论:

【AI-Review】【一般】【基础代码问题】【性能和效率问题】60+个异步API调用顺序await执行

● 问题: componentDidMount 中第219-294行从 await getUniqueId() 到 await DeviceInfo.getSupportedMediaTypeList() 共60+个异步调用全部采用顺序 await,每个调用必须等待前一个完成才能开始。这些调用均经JS-原生bridge,顺序执行的总耗时为各调用耗时之和。

● 影响: 一般。用户启动应用切换到async Tab页后需等待较长时间(60+次bridge往返)才能看到完整数据,示例应用响应体验差。

● 建议: 使用 Promise.allSettled 并行执行无依赖的API调用,总耗时降为最慢单个调用的耗时。例如:

const results = await Promise.allSettled([
  getUniqueId(),
  getManufacturer(),
  DeviceInfo.getBuildId(),
  // ...
]);
results.forEach((r, i) => { if (r.status === 'fulfilled') deviceJSON[keys[i]] = r.value; });
likedislike
cpf-manager
cpf-manager成员8月4日进行代码检视1
example/src/App.tsx
@@ -0,0 +39,4 @@
39+} from 'react-native-device-info';
40+ 
41+const FunctionalComponent = () => {
42+// const batteryLevel = useBatteryLevel();
cpf-manager
cpf-manager8月4日评论:

【AI-Review】【一般】【业务功能】【功能实现错误】Hooks Tab页所有Hook调用被注释,功能为空

● 问题: FunctionalComponent(第41行)中第42-53行的 useBatteryLevel、usePowerState、useDeviceName、useManufacturer、useIsEmulator、useBrightness 等12个Hook调用全部被注释,deviceJSON(第54-67行)为空对象 {}。render方法第349-356行渲染Hooks Tab时显示 JSON.stringify(deviceJSON, null, ' '),即固定输出 {}。

● 影响: 一般。用户点击Hooks Tab页(第398-409行的Hooks按钮)后仅看到 {},无法演示任何Hook功能,示例不完整。

● 建议: 取消第42-53行Hook调用的注释并在 deviceJSON 中引用,使Hooks Tab页展示真实数据;若某些Hook在OpenHarmony上未适配,应为对应Hook添加注释说明并跳过,而非注释全部Hook导致Tab页为空。

likedislike
cpf-manager
cpf-manager成员8月4日进行代码检视1
example/src/App.tsx
@@ -0,0 +24,4 @@
24+ syncUniqueId,
25+ getUniqueId,
26+ getUniqueIdSync,
27+ useBatteryLevel,
cpf-manager
cpf-manager8月4日评论:

【AI-Review】【建议】【编码规范】【其他编码规范】存在14个未使用的import

● 问题: 第23行 getManufacturerSync、第26行 getUniqueIdSync 仅在注释中引用(第139-140行);第27-38行的12个Hook(useBatteryLevel、useBatteryLevelIsLow、usePowerState、useFirstInstallTime、useDeviceName、useManufacturer、useHasSystemFeature、useIsEmulator、useIsHeadphonesConnected、useIsWiredHeadphonesConnected、useIsBluetoothHeadphonesConnected、useBrightness)被导入但实际代码未调用(Hook调用在第42-53行均被注释)。共14个import未被使用。

● 影响: 建议。降低代码可读性,可能触发lint警告(@typescript-eslint/no-unused-vars)。

● 建议: 移除未使用的import;若计划后续启用Hook调用,应在启用时再添加对应import。

likedislike