Javascript 调用AppRegistry.registerComponent失败
我使用Javascript 调用AppRegistry.registerComponent失败,javascript,reactjs,react-native,Javascript,Reactjs,React Native,我使用react native init Wevaha创建了一个新项目,然后 执行它的工作正常,然后我修改了基于我的示例应用程序 再次运行需求时,它工作正常,但下次运行时 运行应用程序时,我得到的错误如下 ' Application Wevaha has not been registered.This is either due to a require() error during intialization or failure to call AppRegistry.registerC
react native init Wevaha
创建了一个新项目,然后
执行它的工作正常,然后我修改了基于我的示例应用程序
再次运行需求时,它工作正常,但下次运行时
运行应用程序时,我得到的错误如下
' Application Wevaha has not been registered.This is either due to a require() error during intialization or failure to call
AppRegistry.registerComponent'
下面附上的屏幕截图请查找
很可能您已经有另一个React本机packager服务器为另一个应用程序运行,或者AppDelegate.m中的应用程序名称与index.js中的应用程序名称不同
尝试关闭所有终端窗口,仔细检查
moduleName
的值,然后再次运行项目 为了详细说明奥巴多说的话,在关闭所有终端窗口/杀死所有其他本地进程之后,我仍然存在这个问题。发生在我身上的是AppDelegate.m
(在XCode项目的根目录中)中的moduleName
的值不正确。我使用的是从中生成的,并试图将其从“雪花”重命名为我自己的,但我忽略了该值,因此出现了该错误。杀死所有其他节点进程对我有效
即
找到这些过程和方法
pkill -f node
在我的例子中,要终止进程,这是由
index.ios.js
中的应用程序名称区分大小写引起的
它在我从
AppRegistry.registerComponent('AppleReactNative', () => App)
到
对我们来说,问题在于注册的应用程序的名称与根文件夹不匹配。因此,如果您的根文件夹是
/ChatApp
,请将您的应用注册为:
AppRegistry.registerComponent('ChatApp', () => App);
对于我的例子,我看一看它正在侦听的packager端口号。 这是在根项目目录中调用
npm start
的结果
┌────────────────────────────────────────────────────────────────────────────┐
│ Running packager on port 8081. │
│ │
│ Keep this packager running while developing on any JS projects. Feel │
│ free to close this tab and run your own packager instance if you │
│ prefer. │
│ │
│ https://github.com/facebook/react-native │
│ │
└────────────────────────────────────────────────────────────────────────────┘
现在取那个PID
number,通过
kill-98131
通过npm start--reset cache重置缓存,再次运行打包机,现在应该可以了
供参考:
react:
15.4.2
,react native:0.41.2
如果在android设备或android emulator上运行时遇到此问题
除了index.js,您还应该确保应用程序名称在下面的文件index.android.bundle
中相同:
您可以在以下路径找到:~android/app/src/main/assets/index.android.bundle
搜索旧的应用程序名称并将其替换为实际名称
它对我有用,希望它也能帮助其他人。只需从((appName,()=>App))中删除小括号即可
确保在
package.json
中注册的应用程序的名称与根文件夹的名称匹配。
在我的react原生应用程序中,它如下所示。确保将名称作为appName(camelCase)从./app.json导入,如下所示:
import React from 'react'
import {AppRegistry} from 'react-native';
import App from './app/index';
import {name as appName} from './app.json';
import { Provider } from 'react-redux'
import { createStore, applyMiddleware, compose } from 'redux'
import promiseMiddleware from 'redux-promise'
import reducers from './app/store/reducers'
const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
const createStoreWithMiddleware = createStore(
reducers,
composeEnhancers(applyMiddleware(promiseMiddleware))
)
const appRedux = () => {
return(
<Provider store={createStoreWithMiddleware}>
<App />
</Provider>
)
}
AppRegistry.registerComponent(appName, () => appRedux);
从“React”导入React
从“react native”导入{AppRegistry};
从“./App/index”导入应用程序;
从“./app.json”导入{name as appName};
从“react redux”导入{Provider}
从“redux”导入{createStore,applyMiddleware,compose}
从“redux promise”导入promiseMiddleware
从“./app/store/reducers”导入还原程序
const composeinhancers=window.uuu REDUX_DEVTOOLS_EXTENSION_u124;COMPOSE|COMPOSE;
const createStoreWithMiddleware=createStore(
减速器,
composeEnhancers(applyMiddleware(promiseMiddleware))
)
常量程序=()=>{
返回(
)
}
AppRegistry.registerComponent(appName,()=>appRedux);
我刚刚运行:
npx反应本机重命名-b
而且它不会覆盖ReactNativeFlipper.java
所以我不得不从
android\app\src\debug\java\com\oldprojname\ReactNativeFlipper.java
到
android\app\src\debug\java\com\newprojname\ReactNativeFlipper.java
并确保在app.json内进行更改
{
“名称”:“newprojname”,
“显示名称”:“新名称”
}
你能给我们看一下你的
index.ios.js
或index.android.js
文件吗?@medttleukiliuly在这种情况下是错误的。如果在AppDelegate.m
中手动更新moduleName
,则错误很可能出现在index.ios.js文件或index.android.js文件中。这是否解决了问题?手动更新是什么意思?我将该值设置为我想要的值,并修复了app.js文件中的problem.app name与app delegate中的name匹配的问题,但我仍然存在此问题。有什么想法吗?不适合我,关闭packager服务器,检查moduleName。argh.如何修复expo app的此问题?com.facebook.react.common.JavascriptException:undefined不是一个对象(评估'U.startApp'),堆栈我收到此类型错误请帮助我您有任何想法。我在index.android.bundlei中发现'U.startApp',如果在MacOS上运行新的React Native for MacOS,这需要在app.json中更改
┌────────────────────────────────────────────────────────────────────────────┐
│ Running packager on port 8081. │
│ │
│ Keep this packager running while developing on any JS projects. Feel │
│ free to close this tab and run your own packager instance if you │
│ prefer. │
│ │
│ https://github.com/facebook/react-native │
│ │
└────────────────────────────────────────────────────────────────────────────┘
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
AwesomePr 8131 haxpor 9u IPv6 0x372bdab8e928e839 0t0 TCP localhost:56484->localhost:sunproxyadmin (SYN_SENT)
AppRegistry.registerComponent(appName, () => App);
import React from 'react'
import {AppRegistry} from 'react-native';
import App from './app/index';
import {name as appName} from './app.json';
import { Provider } from 'react-redux'
import { createStore, applyMiddleware, compose } from 'redux'
import promiseMiddleware from 'redux-promise'
import reducers from './app/store/reducers'
const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
const createStoreWithMiddleware = createStore(
reducers,
composeEnhancers(applyMiddleware(promiseMiddleware))
)
const appRedux = () => {
return(
<Provider store={createStoreWithMiddleware}>
<App />
</Provider>
)
}
AppRegistry.registerComponent(appName, () => appRedux);
and changed inside `ReactNativeFlipper.java`
-com.oldproname
+com.newprojname