导入的 createStackNavigator 未定义
imported createStackNavigator undefined
我在 react-native 项目中导入堆栈导航器时遇到问题。我正在使用 JSX 语法。我在下面发布了有关该项目的信息,我希望这些信息与找到此问题的解决方案有关。
以下代码执行导入。它位于一个名为 App.js
的文件中
import { AppNavigator } from '../navigation'
console.log(AppNavigator) // prints undefined
AppNavigator.js 如下所示:
import { createStackNavigator } from 'react-navigation'
import StartScreen from '../screen/start-screen'
const AppNavigator = createStackNavigator({
Start: {
screen: StartScreen
}
}, {
initialRouteName: 'Start',
navigationOptions: {
header: null
}
})
export default AppNavigator
我已经简化了路由器配置(AppNavigator 有点复杂)以尝试隔离问题,我不认为 StartScreen 搞砸了。 StartScreen.js 以前从未失败过,但是 "undefined issue" 发生在我尝试将 redux 与 React 导航集成之后描述于:https://reactnavigation.org/docs/en/redux-integration.html
这里是项目的package.json:
{
"name": "App",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node node_modules/react-native/local-cli/cli.js start",
"test": "jest",
"clean": "watchman watch-del-all && rm -rf node_modules/ && rm -rf ios/build/ && rm -rf android/build/ && rm -rf $TMPDIR/react-* rm package-lock.json && npm install && react-native link && npm start",
"ios": "react-native run-ios"
},
"dependencies": {
"debounce": "^1.1.0",
"deep-freeze": "0.0.1",
"es6-promise": "^4.2.4",
"event-emitter": "^0.3.5",
"isomorphic-fetch": "^2.2.1",
"moment": "^2.22.1",
"react": "16.3.1",
"react-datepicker": "^1.5.0",
"react-dom": "^16.4.1",
"react-native": "^0.55.4",
"react-native-calendar": "^0.13.1",
"react-native-calendars": "^1.19.3",
"react-native-collapsible": "^0.12.0",
"react-native-elements": "^0.19.1",
"react-native-form": "^2.1.2",
"react-native-modal": "^6.1.0",
"react-native-vector-icons": "^4.6.0",
"react-navigation": "^2.5.5",
"react-navigation-redux-helpers": "^2.0.2",
"react-redux": "^5.0.7",
"redux": "^4.0.0",
"redux-form": "^7.4.2",
"redux-logger": "^3.0.6",
"redux-thunk": "^2.2.0"
},
"devDependencies": {
"babel-jest": "22.4.3",
"babel-preset-react-native": "4.0.0",
"eslint": "^4.19.1",
"eslint-plugin-react": "^7.10.0",
"jest": "22.4.3",
"react-test-renderer": "16.3.1",
"standard": "^11.0.1"
},
"jest": {
"preset": "react-native"
}
}
我正在 运行在 MacBook Mini (macOS Sierra 10.12.6)
上使用 Xcode 9.2 进行项目
我的问题是:当导入 "should work" 时,什么原因可能导致导入产生未定义的结果。我相信我的语法是正确的。是与构建或链接相关的原因。重建了好几次工程,把IOS模拟器上的App去掉,用Xcode重新安装。我还有 运行 以下命令:
"watchman watch-del-all && rm -rf node_modules/ && rm -rf ios/build/ && rm -rf android/build/ && rm -rf $TMPDIR/react-* rm package-lock.json && npm install && react-native link"
你看到了吗?
import { AppNavigator } from '../navigation'
试试这个:
import AppNavigator from '../navigation'
这是因为您正在使用 export default AppNavigator
。如果您使用这样的导出设置 AppNavigator:
export const AppNavigator = createStackNavigator({
Start: {
screen: StartScreen
}
}, {
initialRouteName: 'Start',
navigationOptions: {
header: null
}
})
那么你的解构(import { AppNavigator } from '../navigation'
)就是正确的。
StartScreen.js 包含不正确的导入,导致 AppNavigator.js 中的 StartScreen 导入未定义。
我在 react-native 项目中导入堆栈导航器时遇到问题。我正在使用 JSX 语法。我在下面发布了有关该项目的信息,我希望这些信息与找到此问题的解决方案有关。
以下代码执行导入。它位于一个名为 App.js
的文件中import { AppNavigator } from '../navigation'
console.log(AppNavigator) // prints undefined
AppNavigator.js 如下所示:
import { createStackNavigator } from 'react-navigation'
import StartScreen from '../screen/start-screen'
const AppNavigator = createStackNavigator({
Start: {
screen: StartScreen
}
}, {
initialRouteName: 'Start',
navigationOptions: {
header: null
}
})
export default AppNavigator
我已经简化了路由器配置(AppNavigator 有点复杂)以尝试隔离问题,我不认为 StartScreen 搞砸了。 StartScreen.js 以前从未失败过,但是 "undefined issue" 发生在我尝试将 redux 与 React 导航集成之后描述于:https://reactnavigation.org/docs/en/redux-integration.html
这里是项目的package.json:
{
"name": "App",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node node_modules/react-native/local-cli/cli.js start",
"test": "jest",
"clean": "watchman watch-del-all && rm -rf node_modules/ && rm -rf ios/build/ && rm -rf android/build/ && rm -rf $TMPDIR/react-* rm package-lock.json && npm install && react-native link && npm start",
"ios": "react-native run-ios"
},
"dependencies": {
"debounce": "^1.1.0",
"deep-freeze": "0.0.1",
"es6-promise": "^4.2.4",
"event-emitter": "^0.3.5",
"isomorphic-fetch": "^2.2.1",
"moment": "^2.22.1",
"react": "16.3.1",
"react-datepicker": "^1.5.0",
"react-dom": "^16.4.1",
"react-native": "^0.55.4",
"react-native-calendar": "^0.13.1",
"react-native-calendars": "^1.19.3",
"react-native-collapsible": "^0.12.0",
"react-native-elements": "^0.19.1",
"react-native-form": "^2.1.2",
"react-native-modal": "^6.1.0",
"react-native-vector-icons": "^4.6.0",
"react-navigation": "^2.5.5",
"react-navigation-redux-helpers": "^2.0.2",
"react-redux": "^5.0.7",
"redux": "^4.0.0",
"redux-form": "^7.4.2",
"redux-logger": "^3.0.6",
"redux-thunk": "^2.2.0"
},
"devDependencies": {
"babel-jest": "22.4.3",
"babel-preset-react-native": "4.0.0",
"eslint": "^4.19.1",
"eslint-plugin-react": "^7.10.0",
"jest": "22.4.3",
"react-test-renderer": "16.3.1",
"standard": "^11.0.1"
},
"jest": {
"preset": "react-native"
}
}
我正在 运行在 MacBook Mini (macOS Sierra 10.12.6)
上使用 Xcode 9.2 进行项目我的问题是:当导入 "should work" 时,什么原因可能导致导入产生未定义的结果。我相信我的语法是正确的。是与构建或链接相关的原因。重建了好几次工程,把IOS模拟器上的App去掉,用Xcode重新安装。我还有 运行 以下命令:
"watchman watch-del-all && rm -rf node_modules/ && rm -rf ios/build/ && rm -rf android/build/ && rm -rf $TMPDIR/react-* rm package-lock.json && npm install && react-native link"
你看到了吗?
import { AppNavigator } from '../navigation'
试试这个:
import AppNavigator from '../navigation'
这是因为您正在使用 export default AppNavigator
。如果您使用这样的导出设置 AppNavigator:
export const AppNavigator = createStackNavigator({
Start: {
screen: StartScreen
}
}, {
initialRouteName: 'Start',
navigationOptions: {
header: null
}
})
那么你的解构(import { AppNavigator } from '../navigation'
)就是正确的。
StartScreen.js 包含不正确的导入,导致 AppNavigator.js 中的 StartScreen 导入未定义。