プロジェクト1-React Hooks、ログインページ
33507 ワード
すべての項目1-React Hooks、ログインページ
📕React Hooks
反応素子は2種類ございます
クラス構成部品とピーク構成部品があります
両者の違いは以下の通り
Class Component
クラスコンポーネントには多くの機能があります
だからコードが長くて複雑です
しかもスピードが遅い
Functional Component
パッケージ構成部品は少量の機能を提供
だからコードは短くて簡単です
しかもスピードが速い
だから私たちは大体多くの種類の素子を使っています.
でも反応器でhookを更新しました
これにより、ファン構成部品で使用される機能が
使用可能
だから私はパンク素子で実現します.
📘ログインページ
まず、今ページを開くとログインページが表示されます.
現在のボタンをクリックしてページを移動することは実装されていません.
手動で/loginを追加してサイトアドレスを移動
このようにログインページに入ると、Eメール、パスワード、ログインボタンが表示されます.
CSSを追加して入力フォームを中央にする必要がありますが、まだ正確に
私は知らないので、コードしか持っていません.CSSは後で勉強しましょう.
LoginPage.jsに入るとdivラベル間に入力フォームを追加する必要があります
divラベルの横にスタイルをあげましょう<div style={{display: 'flex', justifyContent: 'center', alignItems: 'center',
width: '100%', height: '100vh'}}>
LoginPage
</div>
こう書けばいい
これからの入力表を入れましょう.import React from 'react'
function LoginPage() {
return (
<div style={{
display: 'flex', justifyContent: 'center', alignItems: 'center',
width: '100%', height: '100vh'
}}>
<form style={{ display: 'flex', flexDirection: 'column'}}>
<label>Email</label>
<input type="email" value onChange />
<label>Password</label>
<input type="password" value onChange />
<br />
<button>
Login
</button>
</form>
</div>
)
}
export default LoginPage
こんな感じでLoginPagejsを修正してWebサイトにアクセスすると、次のように表示されます.
しかし、何かを打ちたいなら、何の変化もありません.
私たちはValueonChangeで何かをするべきですが、私たちは前のReduxで
彼はページ内が変化すれば状態になると言った.
だからvalueにstateを入れるべきだ
EmailとPasswordの2つのstateを作成する必要がありますconst [state, setstate] = useState(initalState)
これはstateを生成するコードで、constの横にstateと書かれた部分を変えればいいです.
そして後ろの頭文字STATEは最初はどうやって展示されていましたか?
スペースに変更すればいいimport React, { useState } from 'react'
function LoginPage() {
const [Email, setEmail] = useState("")
const [Password, setPassword] = useState("")
return (
<div style={{
display: 'flex', justifyContent: 'center', alignItems: 'center',
width: '100%', height: '100vh'
}}>
<form style={{ display: 'flex', flexDirection: 'column'}}>
<label>Email</label>
<input type="email" value={Email} onChange />
<label>Password</label>
<input type="password" value={Password} onChange />
<br />
<button>
Login
</button>
</form>
</div>
)
}
export default LoginPage
このようにコードを変更してもまだ打てない
入力すると、onChangeというイベントが発生し、ステータスが変更されます.
Inputラベルのvalue変化の論理
だからonChangeにはアクティブなリスナーが必要ですimport React, { useState } from 'react'
function LoginPage() {
const [Email, setEmail] = useState("")
const [Password, setPassword] = useState("")
const onEmailHandler = (event) => {
setEmail(event.currentTarget.value)
}
const onPasswordHandler = (event) => {
setPassword(event.currentTarget.value)
}
return (
<div style={{
display: 'flex', justifyContent: 'center', alignItems: 'center',
width: '100%', height: '100vh'
}}>
<form style={{ display: 'flex', flexDirection: 'column'}}>
<label>Email</label>
<input type="email" value={Email} onChange={onEmailHandler} />
<label>Password</label>
<input type="password" value={Password} onChange={onPasswordHandler} />
<br />
<button>
Login
</button>
</form>
</div>
)
}
export default LoginPage
このようにハンドルを作って、保存して入力すると、タイプが見えます.
次に、データ移動のログインボタンを作成します.
まず、ボタンにsubmitタイプを入力し、
formタグにonSubmitを作成し、上のようにイベントハンドラを作成します.
次に、現在のステータスに含まれるコンテンツをコンソールに簡単に撮影します.import React, { useState } from 'react'
function LoginPage() {
const [Email, setEmail] = useState("")
const [Password, setPassword] = useState("")
const onEmailHandler = (event) => {
setEmail(event.currentTarget.value)
}
const onPasswordHandler = (event) => {
setPassword(event.currentTarget.value)
}
const onSubmitHandler = (event) => {
event.preventDefault();
console.log(Email)
console.log(Password)
}
return (
<div style={{
display: 'flex', justifyContent: 'center', alignItems: 'center',
width: '100%', height: '100vh'
}}>
<form style={{ display: 'flex', flexDirection: 'column'}}
onSubmit={onSubmitHandler}>
<label>Email</label>
<input type="email" value={Email} onChange={onEmailHandler} />
<label>Password</label>
<input type="password" value={Password} onChange={onPasswordHandler} />
<br />
<button type="submit">
Login
</button>
</form>
</div>
)
}
export default LoginPage
このように記入し、ボタンを押すと次のように見えます
私たちは前回データを交換したときにAxiosを使うと言いました.
EmailとPasswordを対象にデータを送信
その後Axiospostをサーバのindexとして使用します.jsで作成したログインAPIアドレスを使用
データを入れて送ることです.import { response } from 'express'
import React, { useState } from 'react'
function LoginPage() {
const [Email, setEmail] = useState("")
const [Password, setPassword] = useState("")
const onEmailHandler = (event) => {
setEmail(event.currentTarget.value)
}
const onPasswordHandler = (event) => {
setPassword(event.currentTarget.value)
}
const onSubmitHandler = (event) => {
event.preventDefault();
let body = {
email: Email,
password: Password
}
Axios.post('/api/users/login', body)
.then(response)
}
return (
<div style={{
display: 'flex', justifyContent: 'center', alignItems: 'center',
width: '100%', height: '100vh'
}}>
<form style={{ display: 'flex', flexDirection: 'column'}}
onSubmit={onSubmitHandler}>
<label>Email</label>
<input type="email" value={Email} onChange={onEmailHandler} />
<label>Password</label>
<input type="password" value={Password} onChange={onPasswordHandler} />
<br />
<button type="submit">
Login
</button>
</form>
</div>
)
}
export default LoginPage
サーバのインデックス.jsファイルで作成したapiから見ると、ログインに成功すれば、
DBがユーザーを検索している場合は、タグを作成してCookieに送信します.
車に戻って、それを受け取って、私たちはさらなる処理が必要です.
ここでリデスを使います.
リデスを使う部分はどう使っても言葉では表現しにくいので、リンクで代用します.
上の動画を見て、ゆっくりフォローして、ログインしてみました.
このようにログインが正しい様子が見られます
そしてYouTube動画の最後の部分を見るとログインページに移動します
YouTube動画のようにするとプッシュ関連エラーが発生しますimport { useNavigate } from 'react-router-dom'
const navigate = useNavigate()
navigate('/')
この3種類を利用すれば、ログインページにアクセスできます
コード全文は以下に置くimport React, { useState } from 'react'
import { useDispatch } from 'react-redux'
import { useNavigate } from 'react-router-dom'
import { loginUser } from '../../../_actions/user_action'
function LoginPage(props) {
const navigate = useNavigate()
const dispatch = useDispatch()
const [Email, setEmail] = useState("")
const [Password, setPassword] = useState("")
const onEmailHandler = (event) => {
setEmail(event.currentTarget.value)
}
const onPasswordHandler = (event) => {
setPassword(event.currentTarget.value)
}
const onSubmitHandler = (event) => {
event.preventDefault();
let body = {
email: Email,
password: Password
}
dispatch(loginUser(body))
.then(response => {
if (response.payload.loginSuccess) {
navigate('/')
} else {
alert('Error')
}
})
}
return (
<div style={{
display: 'flex', justifyContent: 'center', alignItems: 'center',
width: '100%', height: '100vh'
}}>
<form style={{ display: 'flex', flexDirection: 'column'}}
onSubmit={onSubmitHandler}>
<label>Email</label>
<input type="email" value={Email} onChange={onEmailHandler} />
<label>Password</label>
<input type="password" value={Password} onChange={onPasswordHandler} />
<br />
<button type="submit">
Login
</button>
</form>
</div>
)
}
export default LoginPage
Reference
この問題について(プロジェクト1-React Hooks、ログインページ), 我々は、より多くの情報をここで見つけました
https://velog.io/@qnrl3442/프로젝트-1-pxgi26nz
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
<div style={{display: 'flex', justifyContent: 'center', alignItems: 'center',
width: '100%', height: '100vh'}}>
LoginPage
</div>
import React from 'react'
function LoginPage() {
return (
<div style={{
display: 'flex', justifyContent: 'center', alignItems: 'center',
width: '100%', height: '100vh'
}}>
<form style={{ display: 'flex', flexDirection: 'column'}}>
<label>Email</label>
<input type="email" value onChange />
<label>Password</label>
<input type="password" value onChange />
<br />
<button>
Login
</button>
</form>
</div>
)
}
export default LoginPage
const [state, setstate] = useState(initalState)
import React, { useState } from 'react'
function LoginPage() {
const [Email, setEmail] = useState("")
const [Password, setPassword] = useState("")
return (
<div style={{
display: 'flex', justifyContent: 'center', alignItems: 'center',
width: '100%', height: '100vh'
}}>
<form style={{ display: 'flex', flexDirection: 'column'}}>
<label>Email</label>
<input type="email" value={Email} onChange />
<label>Password</label>
<input type="password" value={Password} onChange />
<br />
<button>
Login
</button>
</form>
</div>
)
}
export default LoginPage
import React, { useState } from 'react'
function LoginPage() {
const [Email, setEmail] = useState("")
const [Password, setPassword] = useState("")
const onEmailHandler = (event) => {
setEmail(event.currentTarget.value)
}
const onPasswordHandler = (event) => {
setPassword(event.currentTarget.value)
}
return (
<div style={{
display: 'flex', justifyContent: 'center', alignItems: 'center',
width: '100%', height: '100vh'
}}>
<form style={{ display: 'flex', flexDirection: 'column'}}>
<label>Email</label>
<input type="email" value={Email} onChange={onEmailHandler} />
<label>Password</label>
<input type="password" value={Password} onChange={onPasswordHandler} />
<br />
<button>
Login
</button>
</form>
</div>
)
}
export default LoginPage
import React, { useState } from 'react'
function LoginPage() {
const [Email, setEmail] = useState("")
const [Password, setPassword] = useState("")
const onEmailHandler = (event) => {
setEmail(event.currentTarget.value)
}
const onPasswordHandler = (event) => {
setPassword(event.currentTarget.value)
}
const onSubmitHandler = (event) => {
event.preventDefault();
console.log(Email)
console.log(Password)
}
return (
<div style={{
display: 'flex', justifyContent: 'center', alignItems: 'center',
width: '100%', height: '100vh'
}}>
<form style={{ display: 'flex', flexDirection: 'column'}}
onSubmit={onSubmitHandler}>
<label>Email</label>
<input type="email" value={Email} onChange={onEmailHandler} />
<label>Password</label>
<input type="password" value={Password} onChange={onPasswordHandler} />
<br />
<button type="submit">
Login
</button>
</form>
</div>
)
}
export default LoginPage
import { response } from 'express'
import React, { useState } from 'react'
function LoginPage() {
const [Email, setEmail] = useState("")
const [Password, setPassword] = useState("")
const onEmailHandler = (event) => {
setEmail(event.currentTarget.value)
}
const onPasswordHandler = (event) => {
setPassword(event.currentTarget.value)
}
const onSubmitHandler = (event) => {
event.preventDefault();
let body = {
email: Email,
password: Password
}
Axios.post('/api/users/login', body)
.then(response)
}
return (
<div style={{
display: 'flex', justifyContent: 'center', alignItems: 'center',
width: '100%', height: '100vh'
}}>
<form style={{ display: 'flex', flexDirection: 'column'}}
onSubmit={onSubmitHandler}>
<label>Email</label>
<input type="email" value={Email} onChange={onEmailHandler} />
<label>Password</label>
<input type="password" value={Password} onChange={onPasswordHandler} />
<br />
<button type="submit">
Login
</button>
</form>
</div>
)
}
export default LoginPage
import { useNavigate } from 'react-router-dom'
const navigate = useNavigate()
navigate('/')
import React, { useState } from 'react'
import { useDispatch } from 'react-redux'
import { useNavigate } from 'react-router-dom'
import { loginUser } from '../../../_actions/user_action'
function LoginPage(props) {
const navigate = useNavigate()
const dispatch = useDispatch()
const [Email, setEmail] = useState("")
const [Password, setPassword] = useState("")
const onEmailHandler = (event) => {
setEmail(event.currentTarget.value)
}
const onPasswordHandler = (event) => {
setPassword(event.currentTarget.value)
}
const onSubmitHandler = (event) => {
event.preventDefault();
let body = {
email: Email,
password: Password
}
dispatch(loginUser(body))
.then(response => {
if (response.payload.loginSuccess) {
navigate('/')
} else {
alert('Error')
}
})
}
return (
<div style={{
display: 'flex', justifyContent: 'center', alignItems: 'center',
width: '100%', height: '100vh'
}}>
<form style={{ display: 'flex', flexDirection: 'column'}}
onSubmit={onSubmitHandler}>
<label>Email</label>
<input type="email" value={Email} onChange={onEmailHandler} />
<label>Password</label>
<input type="password" value={Password} onChange={onPasswordHandler} />
<br />
<button type="submit">
Login
</button>
</form>
</div>
)
}
export default LoginPage
Reference
この問題について(プロジェクト1-React Hooks、ログインページ), 我々は、より多くの情報をここで見つけました https://velog.io/@qnrl3442/프로젝트-1-pxgi26nzテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol