React-native,“Native模块不能为null”

时间:2016-08-01 12:17:03

标签: react-native

我只是将React-native从0.28升级到0.30,并收到此错误:

“Native模块不能为null”。

问题似乎与行/包有关:

var PushNotification = require('react-native-push-notification');

enter image description here 提前致谢

13 个答案:

答案 0 :(得分:17)

红框投诉react-native在<unkown>中找不到符号PushNotificationIOS.js line 18

当您无法将第三个lib链接到目标时,通常会发生这种情况,导致NativeModules在尝试时找不到任何内容。

要解决此问题,请使用Project Navigator - &gt;目标 - &gt;一般 - &gt;链接的框架和库,确保somelib.a在那里。

enter image description here

在您的情况下,请关注ios install guidesreact-native doc

答案 1 :(得分:6)

有时候,如果你有另一个react-native packager已经在运行不同的应用程序。你可能会看到这个问题。

特别是如果react-native版本相同且之前启动的应用程序需要当前应用程序中不可用的本机模块。

在这些情况下,你可以杀死react packager终端并重启它,问题应该消失。

此外,如果它是相同的应用程序,您刚刚升级。确保它已正确链接。如果没有再次调用react-native链接。

答案 2 :(得分:5)

就我而言,在/ ios目录中运行$ pod install可以解决问题!

答案 3 :(得分:2)

我认为这与如何导出和导入模块有关。 确保每个相应的

如果您导出模块module.exports = moduleName;,则应使用var moduleName = require('moduleName');

导入

如果使用export default moduleName;导出模块。您应该使用import ModuleName from './ModuleName;

导入

检查所有出口和进口。

答案 4 :(得分:2)

删除node_modules中的react-native-push-notification

运行npm install react-native-push-notification@3.1.3

答案 5 :(得分:2)

  1. library(shiny) library(bsplus) # global button counter cpt <- 0 # function to create a new slider input newinput <- function(ID, tag){ div(id=ID, bs_append( tag = tag, title_side = ID, content_side = NULL, content_main = sliderInput( inputId = paste0("slider_",ID), label = paste0("slider_",ID), value = 0, min=0, max=10) ) ) } # UI ui <- shinyUI(fluidPage( titlePanel("bs_append and insertUI"), sidebarPanel( fluidRow( actionButton("add", "+"), mytag <- bs_accordion_sidebar(id = "accordion", spec_side = c(width = 4, offset = 0), spec_main = c(width = 8, offset = 0)), div(id = "placeholder"), actionButton("delete", "-") ) ), mainPanel( plotOutput('show_inputs') ), use_bs_accordion_sidebar() )) # SERVER server <- shinyServer(function(input, output) { # reactive function to collect all input values AllInputs <- reactive({ myvalues <- sapply(names(input)[!names(input) %in% c("add", "delete")], function(x) input[[x]]) print(myvalues) return(myvalues) }) # simple output barplot output$show_inputs <- renderPlot({ barplot(AllInputs()) }) # take a dependency on 'add' button observeEvent(input$add, { cpt <<- cpt + 1 insertUI( selector ='#placeholder', where = "beforeEnd", ui = newinput(ID = cpt, tag = mytag) ) }) # take a dependency on 'delete' button observeEvent(input$delete, { removeUI(selector = paste0('#', cpt)) cpt <<- cpt - 1 }) }) shinyApp(ui, server)
  2. npm i @react-native-community/push-notification-ios
  3. cd ios && pod install

这是我奋斗几个小时后解决的方法。

答案 6 :(得分:1)

请使用react native的ios推送通知包,而不是native的。

https://github.com/react-native-community/react-native-push-notification-ios

从您的库中删除RCTPushNotification项目,并尝试使用react-native-community的ios推送通知。您需要按照指南进行操作。 (xcode和链接有一些区别。)

答案 7 :(得分:1)

我的问题有相同的症状,但根本原因却大不相同。我在两个不同的Xcode实例中打开了两个React Native项目。我的Metro捆绑器仍从项目A运行,并导致在模拟器中运行项目B的问题。

解决方法:关闭Xcode生成的运行Metro Bundler的旧终端窗口,然后重新运行项目。

答案 8 :(得分:1)

有时候,当您通过npm安装不同的库时,可能会遇到问题。所有需要做的是:转到项目的ios文件夹,然后运行pod install。这将有助于避免此错误,这也是原因之一。

答案 9 :(得分:0)

如果它可以帮助某人。 手动链接库 ios的node_modules / react-native / libraries / PushNotificationIOS / RCTPushNotification.xcodeproj https://facebook.github.io/react-native/docs/linking-libraries-ios#manual-linking

是手动链接所指的位置。不反应本地推送通知

答案 10 :(得分:0)

尝试命令

$pod install 
YourProject/ios

。它对我有用。

希望有帮助吗?

答案 11 :(得分:0)

1-在iOS中,消息为“本地模块不能为空”

2-在Android消息中,'null不是评估RNFSManager等的对象'

含义相同,解决方案不同,在两种情况下,您都需要手动链接本机库。

iOS解决方案在iOS目录中pod install运行,然后react-native run-ios重新运行该应用。

Android的解决方案是react-native link react-native-fs,然后react-native run-android重新运行该应用程序。

注意:在android中最好是再次在android studio中打开项目,以免带来任何不便。

答案 12 :(得分:-1)

尝试

react-native link react-native-push-notification
cd ios
pod install