You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native自定义npm包Native组件undefined问题求助

问题排查与解决方案

1. 原生模块未被正确注册或链接

本地测试正常但npm包安装后失效,核心原因大概率是npm包未包含完整的Android原生代码,或是自动链接机制未生效:

  • 检查npm包根目录的package.json,确认react-native字段已正确配置Android模块路径:
    "react-native": {
      "android": "./android"
    }
    
  • 排查.npmignore或.gitignore文件,确保Android原生代码(如MyViewManager.java、自定义Package类)未被排除在npm包外。
  • 安装包后执行npx react-native run-android重新编译原生工程,自动链接需要重新构建才能完成模块注入。

2. UIManager命令的获取方式错误

React Native 0.60+版本中,直接通过UIManager.MyViewManager访问视图管理器的方式已不推荐,打包后会出现解析失败的情况,需改用UIManager.getViewManagerConfig获取配置:
修改createMediumRectangle函数如下:

const createMediumRectangle = (viewId) => {
  const viewConfig = UIManager.getViewManagerConfig('MyViewManager');
  if (!viewConfig) {
    console.error('MyViewManager 未在原生端注册');
    return;
  }
  UIManager.dispatchViewManagerCommand(
    viewId,
    viewConfig.Commands.create.toString(),
    [viewId]
  );
};

3. 未渲染Native组件导致Ref为空

你的Test组件仅返回了<Text>元素,完全没有渲染MyViewManager组件,导致ref.current始终为null,后续调用必然触发异常。需先渲染Native组件:

return (
  <>
    <Text>hola</Text>
    <MyViewManager ref={ref} style={{ width: 300, height: 250 }} />
  </>
);

4. 检查Android原生代码的注册逻辑

确认自定义Package类中已正确注册MyViewManager:

public class MyPackage implements ReactPackage {
  @Override
  public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
    return Arrays.<ViewManager>asList(
      new MyViewManager()
    );
  }
  // 其他实现方法
}

同时需在MainApplication的getPackages方法中添加该自定义Package。

内容的提问来源于stack exchange,提问作者lol69

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 10:35:33