- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在 React Native Expo 中构建应用程序。首先,我简单地通过将登录异步代码复制并粘贴到 Login.js 并将 this.login() 添加到 componentWillMount 来合并 Facebook 登录。这有效 - Facebook 登录弹出窗口显示为应用程序加载。我能够通过成功消息登录到我的 FB 帐户。
但是,一旦我尝试合并 Firebase,特别是在我的 Home.js 页面和 Login.js 页面之间传输代码的某个地方,我就开始在页面加载时出现这个白屏。
终端没有错误;除了 FacebookAppID 和 facebookDisplayName 不属于 app.json 的消息。
我尝试在 CSS 中添加不同的背景颜色(黑色),这有效,但仍然没有内容。
从 app.json 中删除 FacebookAppID 和 facebookDisplayName,但什么也没做。
将我的 App Key 更新为正确的(我遗漏了最后一个数字)。
多次重新启动终端、expo web 终端 x code 和 metro builder。
更新了我的代码,以便我的 Screens 目录中的每个文件在底部都有 { connect } 和 { login } 导入以及 functionMapStateToProps 和 export 默认连接语句。
我尝试将 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结束------------
首页.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 文件夹
Action .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 文件夹结束 ------
-----导航文件夹( react 导航)---------根导航器.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结束----
最佳答案
你试过远程js调试吗?您可以做的是,远程调试 JS。 https://developers.google.com/web/tools/chrome-devtools/remote-debugging/
尝试 console.log("hi");
当您的应用程序的第一个组件安装时。尝试在登录组件挂载时将其添加到登录页面。这将帮助您调试 js 调试器中列出的看不见的错误。只需检查这些错误并跟进即可!
一切顺利!
关于firebase - 如何在没有错误提示的情况下调试 RN Expo 应用程序中的白屏页面(无内容显示),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54740029/
添加 Rn,#1 ADDS Rd, Rn, #1 ARM 文档指定在第一条指令中,如果 Rd 是可选的,如果省略,则 Rd 等于 Rn。所以编译时两条指令应该是相同的。但是我们的编译器正在生成: 0x
11/04 更新: 我已经用一个应用程序创建了一个代码库,它在下面演示了这个问题。任何想要安装和使用它的人都可以在这里找到它...... https://github.com/geirman/reac
我必须从卡片列表中选择一张或两张卡片,点击每张卡片/复选框后,该卡片就会突出显示(并被选中)。每张卡上都有复选框,显示通过其进行选择的特定卡。您可以重新点击同一复选框以取消选择它。 我对原生 reac
只要帖子之间有空格,它就会显示 rn。这是我读取插入数据的方式: $content_of_post_original = mysql_real_escape_string($_POST['post_c
我正在尝试配置 Azure AD B2C 应用程序以实现 native react 并使用 this lib对于 react native 。它适用于 IOS,但对于 Android,我遇到以下错误。
我有一个水平平面列表,其中每个项目的宽度为宽度:300我想做的就是获取当前可见项目的索引。 this.handleScroll(e)} horizontal={true}
我有一个基于官方文档中的简单示例的工作代码: https://docs.expo.io/versions/latest/sdk/camera和 https://docs.expo.io/version
我想使用属性值来动态添加颜色 - 与父 View 相关。 我有以下 - © Copyright 2019 LRM Security Ltd 将通过以下方式设置样式: const copy
我的 state 对象中有一个空白数组。该数组将包含一些具有键值对的对象。 这是我的代码: import * as React from 'react'; import { Text, ScrollV
仅当作为参数传递的值为 True 使用函数返回时,我才需要在 touchableOpacity 中显示一个图标。 请指导我,因为它显示了 renderIcon() 函数的一些错误。 const Car
我已应用正确的 css 属性使容器居中,但容器仍未居中。特别是 justifyContent 和 alignItems。我不想将里面的东西居中,而只是将容器居中。我怎样才能做到这一点? functio
我正在关注 detox mocking guide与 typescript 。该应用程序始终打印 X.ts 的 console.log文件而不是 X.e2e.ts文件。 依赖版本。 react-nat
我有这段代码,当我运行该程序时,我得到的只是白屏。没有错误,我可以看到我的日志,所以我知道程序呈现并运行。我的猜测是, 存在一些问题。风格,但我无法解决这个问题。 所以这里的逻辑是,我基本上在渲染 V
我的 RN 应用程序中有以下代码。 handleTextChange = e => { this.setState({ value: e }) } 我使用 TS,这表示“参数 'e' 隐式具有 '
我正在实现自己的模块,但在快速将参数传递到函数中时遇到问题。该函数应该返回 Promise。它总是因这个错误而崩溃 异常“getPassesOf:不是可识别的 Objective-C 方法。”在使用参
我们经常使用这些术语。但为何如此命名尚不清楚。 最佳答案 Rd:目标寄存器 Rn:寄存器中用于算术运算的操作数。 Rm:寄存器中用于算术运算的操作数。 Ra:寄存器中用于加法或减法的值。想想“蓄能器”
如何在 React Native Flatlist 中列出 2 列,例如: 最佳答案 只需通过 Prop numColumns到您的 FlatList 组件。 关于react-native - RN
我正在实现自己的模块,但在快速将参数传递到函数中时遇到问题。该函数应该返回 Promise。它总是因这个错误而崩溃 异常“getPassesOf:不是可识别的 Objective-C 方法。”在使用参
我们经常使用这些术语。但为何如此命名尚不清楚。 最佳答案 Rd:目标寄存器 Rn:寄存器中用于算术运算的操作数。 Rm:寄存器中用于算术运算的操作数。 Ra:寄存器中用于加法或减法的值。想想“蓄能器”
最近我检查了 ARM Cortex-M3 处理器的指令集。 例如: ADD , , 这些缩写到底是什么意思? 我猜他们的意思是不同类型的地址,比如直接寻址、相对寻址等等。 但究竟是什么? 谢谢! 最
我是一名优秀的程序员,十分优秀!