reactjs - 构建 firebase/react 应用程序时的空白页
问题描述
我是新来的反应和 firbase。因此,我正在尝试通过电子邮件和密码构建登录/注册页面,主要使用我从各种教程中学到的东西。
现在它只是注册页面,您应该在其中输入您的电子邮件和密码,确认您的密码并注册。
每次我运行npm start应用程序编译成功,没有警告,但我收到一个空白页。
SignUp.js 组件如下所示:
import React, {useRef, useState} from 'react'
import { Form, Card, Button, Alert } from 'react-bootstrap'
import { useAuth } from '../../contexts/AuthContext'
export default function SignUp() {
const emailRef = useRef()
const passwordRef = useRef()
const passwordConfirmRef = useRef()
const { signup } = useAuth()
const [error, setError] = useState('')
const [loading, setLoading] = useState(false)
async function handleSubmit(e) {
e.preventDefault()
if (passwordRef.current.value !==
passwordConfirmRef.current.value) {
return setError(
'Passwörter stimmen nicht überein')
}
try {
setError('')
setLoading(true)
await signup(emailRef.current.value, passwordRef.current.value)
} catch {
setError('Registrierung fehlgeschlagen!')
}
setLoading(false)
}
return (
<>
<Card>
<Card.Body>
<h2 className="text-center mb-4">Registrierung</h2>
{error && <Alert variant='danger'>{error}</Alert>}
<Form onSubmit={handleSubmit}>
<Form.Group id="email">
<Form.Label>E-Mail</Form.Label>
<Form.Control type="email" ref={emailRef} required/>
</Form.Group>
<Form.Group id="password">
<Form.Label>Passwort</Form.Label>
<Form.Control type="password" ref={passwordRef} required/>
</Form.Group>
<Form.Group id="password-confirm">
<Form.Label>Passwort Bestätigung</Form.Label>
<Form.Control type="password" ref={passwordConfirmRef} required/>
</Form.Group>
<Button disabled={loading} className="w-100" type="sumbit">
Registrieren
</Button>
</Form>
</Card.Body>
</Card>
<div className="w-100 text-center mt-2">
Bereits registriert? Zum Login
</div>
</>
)
}
用于身份验证的 Context AuthContext.js 如下所示:
import React, { useContext, useState, useEffect } from 'react'
import { auth } from '../FireConfig/fire'
const AuthContext = React.createContext()
export function useAuth(){
return useContext(AuthContext)
}
export function AuthProvider({ children }) {
const [currentUser, setCurrentUser] = useState()
const [loading, setLoading] = useState(true)
//Create new User on signUp
function signup(email, password){
return auth.createUserWithEmailAndPassword(email, password)
}
//Listener for changes in User status -> sets current User for further usage
useEffect(() => {
const unsubscribe = auth.onAuthStateChanged(user => {
setCurrentUser(user)
setLoading(false)
})
return unsubscribe
}, [])
const value = {
currentUser,
signup
}
return (
<AuthContext.Provider value={value}>
{!loading && children}
</AuthContext.Provider>
)
}
App.js 看起来像这样:
import React from "react";
import "./App.css";
import { Container } from "react-bootstrap";
import SignUp from "./components/common/SignUp";
import { AuthProvider } from "./contexts/AuthContext";
function App() {
/* const classes = useStyles(); */
return (
<AuthProvider>
<Container
className="d-flex align-items-center justify-content-center"
style={{ minHeight: "100vh"}}
>
<div className="w-120" style={{ maxWidth: "400px"}}>
<SignUp/>
</div>
</Container>
</AuthProvider>
)
}
export default App;
我很感激任何帮助。请温柔一点;)
解决方案
推荐阅读
- c++ - 当我尝试通过 static_cast 将 uint_fast8_t 转换为 bitset<8> 时,我收到了一个奇怪的错误
- git - 如何将 git 分支文件下载到本地系统?
- python - Is it possible to refer to an attribute of an object though multiple layers in Python?
- kdb - q / KDB+ 如何遍历字符串列表
- spring-boot - Facebook 洞察 API 细分不起作用
- mysql - 仅根据月份和年份选择功能
- email - NLog 配置 - SMTP 电子邮件通知不起作用
- react-native - 尝试在 React-Native 中的 Victory 图表中的条形图中创建对角虚线(线性渐变)
- wordpress - WooCommerce:如何显示产品插件价格?
- html-framework-7 - Framework7 在更改前进行确认切换