如何在RN Expo App中调试白屏页面(无内容显示)且无错误提示
Posted
技术标签:
【中文标题】如何在RN Expo App中调试白屏页面(无内容显示)且无错误提示【英文标题】:How to Debug White Screen Page (No Content Showing) in RN Expo App with No Error Prompts 【发布时间】:2019-07-11 09:49:16 【问题描述】:我一直在 React Native Expo 中构建一个应用程序。首先,我通过将登录异步代码复制并粘贴到 Login.js 中来合并 Facebook 登录,并将 this.login() 添加到 componentWillMount。这有效 - 随着应用程序加载显示 Facebook 登录弹出窗口。我能够登录我的 FB 帐户并显示成功消息。
但是,当我尝试合并 Firebase 时,尤其是在我的 Home.js 页面和 Login.js 页面之间传输代码之间的某个地方,我开始在页面加载时出现这个白屏。
终端没有错误;除了 FacebookAppID 和 facebookDisplayName 不属于 app.json 的消息。
我尝试在 CSS 中添加不同的背景颜色(黑色),效果很好,但仍然没有内容。
从 app.json 中删除 FacebookAppID 和 facebookDisplayName,这没有任何作用。
将我的应用密钥更新为正确的(我错过了最后一个数字)。
多次重启终端、expo web终端x代码和metro builder。
更新了我的代码,以便我的 Screens 目录中的每个文件都有 connect 和 login 导入以及 functionMapStateToProps 并在底部导出默认连接语句。
我尝试将 TabNavigator.js 中的选项卡更改为登录页面,并使用“登录”作为初始路由名称,但收到一个错误,即 Login.js 不是 React 组件。
应该在任何其他页面之前显示的第一个页面是 Facebook 登录...所以看起来问题就在那里。
App.js
import React from 'react';
import Login from './screens/Login';
import reducers from './redux/reducers';
import thunkMiddleware from 'redux-thunk';
import Provider from 'react-redux';
import createStore, applyMiddleware from 'redux';
const middleware = applyMiddleware(thunkMiddleware);
const store = createStore(reducers, middleware);
export default class App extends React.Component
render()
return (
<Provider store=store>
<Login/>
</Provider>
);
-------- App.js 结束------------
登录.js
import React from 'react';
import styles from '../styles'
import RootNavigator from '../navigation/RootNavigator';
import connect from 'react-redux';
import login from '../redux/actions';
import * as firebase from 'firebase';
import firebaseConfig from '../config/firebase.js';
firebase.initializeApp(firebaseConfig)
import
Text,
View,
TouchableOpacity
from 'react-native';
class Login extends React.Component
state =
componentWillMount()
firebase.auth().onAuthStateChanged((user) =>
if (user != null)
this.props.dispatch(login(true))
console.log("We are authenticated now!" + JSON.stringify(user));
);
login = async () =>
const type, token = await Expo.Facebook.logInWithReadPermissionsAsync('YourAppKeyGoesHere',
permissions: ['public_profile'],
);
if (type === 'success')
// Build Firebase credential with the Facebook access token.
const credential = await firebase.auth.FacebookAuthProvider.credential(token);
// Sign in with credential from the Facebook user.
firebase.auth().signInWithCredential(credential).catch((error) =>
// Handle Errors here.
Alert.alert("Try Again")
);
render()
if(this.props.loggedIn)
return (
<RootNavigator/>
)
else
return (
<View style=styles.container>
<TouchableOpacity onPress=this.login.bind(this)>
<Text>this.props.loggedIn</Text>
</TouchableOpacity>
</View>
)
function mapStateToProps(state)
return
loggedIn: state.loggedIn
;
export default connect(mapStateToProps)(Login);
---------Login.js 结束 ----------
Home.js
import React from 'react';
import styles from '../styles';
import connect from 'react-redux';
import login from '../redux/actions';
import
Text,
View,
Alert
from 'react-native';
class Home extends React.Component
state =
componentWillMount()
render()
return (
<View>
<Text>Home</Text>
</View>
)
function mapStateToProps(state)
return
loggedIn: state.loggedIn
;
export default connect(mapStateToProps)(Home);
-----Home.js 结束 ------
redux 文件夹
actions.js
export function login()
return function(dispatch)
dispatch( type: 'LOGIN', payload: input );
----actions.js 结束----
reducers.js
export default reducers = (state =
loggedIn: false,
, action) =>
switch (action.type)
case 'LOGIN':
return ...state, loggedIn: action.payload
return state;
------reducers.js 结束 ------ -----redux 文件夹结束------
-----导航文件夹(反应导航)----- ---RootNavigator.js---
import React from 'react';
import TabNavigator from './TabNavigator';
import
createDrawerNavigator,
createStackNavigator,
createBottomTabNavigator,
createAppContainer,
from 'react-navigation';
const AppNavigator = createStackNavigator(
Main:
screen: TabNavigator,
,
);
const AppContainer = createAppContainer(AppNavigator);
export default class RootNavigator extends React.Component
render()
return <AppContainer/>;
----RootNavigator.js结束-----
----TabNavigator.js----
import React from 'react';
import Home from '../screens/Home';
import Profile from '../screens/Profile';
import Matches from '../screens/Matches';
import
createDrawerNavigator,
createStackNavigator,
createBottomTabNavigator,
createAppContainer,
createMaterialTopTabNavigator,
from 'react-navigation';
export default createBottomTabNavigator(
Profile:
screen: Profile,
navigationOptions:
tabBarLabel: 'Profile',
,
,
Home:
screen: Home,
navigationOptions:
tabBarLabel: 'Home',
,
Matches:
screen: Matches,
navigationOptions:
tabBarLabel: 'Matches',
,
,
,
navigationOptions:
header: null
,
tabBarPosition: 'top',
initialRouteName: 'Home',
animationEnabled: true,
swipeEnabled: true,
tabBarOptions:
style:
height: 75,
backgroundColor: 'blue'
,
);
-----TabNavigator 结束----
【问题讨论】:
【参考方案1】:你试过远程js调试吗? 你可以做的是,远程调试 JS。 https://developers.google.com/web/tools/chrome-devtools/remote-debugging/
当您的应用程序的第一个组件挂载时,尝试console.log("hi");
。
尝试在登录组件挂载时将其添加到登录页面中。
这将帮助您调试 js 调试器中列出的看不见的错误。
只需检查这些错误并跟进!
你可以走了!
【讨论】:
谢谢阿克谢。我会试试这个。【参考方案2】:正如另一个答案所暗示的那样,一旦您完成console.log
以查看组件实际正在加载,那么对我来说问题是我实际上无法看到内容。
我的解决方案是用<View>
包裹我的内容,以使内容在页面中间对齐。
我知道您的问题比这更复杂,但希望我的回答可能对其他人有所帮助。
<View
style=
flex: 1,
alignItems: 'center',
justifyContent: 'space-around',
>
<Text>Can you see this?</Text>
</View>
【讨论】:
【参考方案3】:就我而言,
style = borderColor : #fff
我的错误是在边界颜色值处除外...
修复更改
style = borderColor : '#fff'
【讨论】:
【参考方案4】:我也得到了飞溅徽标白屏,疲惫的可能解决方案没有任何效果,最后我删除了 node_module 和 yarn.lock。然后重新安装并更新博览会 跟随 cmd:-
$ npm 安装
$纱添加博览会
$ 展会更新
试试这个,对我有用。
!!享受吧!!
【讨论】:
以上是关于如何在RN Expo App中调试白屏页面(无内容显示)且无错误提示的主要内容,如果未能解决你的问题,请参考以下文章