为本机应用定义入口点

Tem*_*Fix 9 react-native expo

我刚刚开始使用本机反应并创建了一个基础应用程序create-react-native-app.

我做了一些重组并制作了一些新的文件夹,并将App.js重命名为Home.js. 我修改了app.json包含引用新Home.js文件的入口点.当我加载应用程序时,没有任何反应.没有错误,只是停留在世博会屏幕上.

.
 -components
 -screens
    -Home
        Home.js
 -config
 -node_modules
 -tests
 app.json
Run Code Online (Sandbox Code Playgroud)

app.json文件:

{
  "expo": {
    "sdkVersion" : "23.0.0",
    "entryPoint" : "./screens/Home/Home.js"
  }
}
Run Code Online (Sandbox Code Playgroud)

你如何定义应用程序的入口点?

小智 12

如果您使用的是Expo,则必须在app.json文件中指定入口点,如下所示:

{
  "expo": {
    "entryPoint": "./src/app/index.js"
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,在该文件中,您需要注册该应用程序 Expo.registerRootComponent(YOUR_MAIN_APP_COMPONENT)

import Expo from 'expo'
...

class App extends Component {
  ...
}

export default Expo.registerRootComponent(App);
Run Code Online (Sandbox Code Playgroud)

这样您就可以在任何地方添加条目文件.

  • `从'expo'导入Expo`不起作用。您必须“从“expo”导入{registerRootComponent}”。 (4认同)
  • 这个答案现在已经过时了 (3认同)

kid*_*oca 11

世博项目

根据当前的 Expo 文档,如果您想要一个与App.js文件不同的入口点,您可以更新package.json- 添加一个main包含所需入口点路径的字段。然后在入口点文件中,您还必须注册应用程序的组件。当未指定入口点并且是App.js文件时,Expo 会自动执行此操作

包.json

{
 "main": "my/customEntry.js"
}
Run Code Online (Sandbox Code Playgroud)

入口点文件.js

{
 "main": "my/customEntry.js"
}
Run Code Online (Sandbox Code Playgroud)

如果我想将主应用程序文件命名为 App.js 以外的名称怎么办?- https://docs.expo.io/versions/latest/sdk/register-root-component/#what-if-i-want-to-name-my


And*_*rew 7

您需要更新,app.json以便成为entryPoint的新路径App.js

{
  "expo": {
    "entryPoint": "./src/App.js",
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,使用Expo.registerRootComponent(App)会在SDK 32中导致以下错误:

undefined is not an object (evaluating '_expo.default.registerRootComponent') 
Run Code Online (Sandbox Code Playgroud)

可以通过显式导入来固定registerRootComponent,而不是尝试通过进行访问Expo.registerRootComponent

这是一个样本App.js

import { registerRootComponent } from 'expo';

class App extends React.Component {
  ...
}

export default registerRootComponent(App);
Run Code Online (Sandbox Code Playgroud)


Hen*_*uno 7

如果您的项目采用托管工作流设置(默认设置),如 doc 中所述则必须导入 registerRootComponent 并使用您的根组件作为参数调用它,在您希望成为主要组件的文件中:

import { registerRootComponent } from 'expo';

const AnyName() { ... } // Your root component

registerRootComponent(AnyName)
Run Code Online (Sandbox Code Playgroud)

然后,在package.json文件中,将“main”更改为该文件相对路径,例如

{
  "main": "src/main.js"
}
Run Code Online (Sandbox Code Playgroud)