Instagramクローン-LOgin Page
ログイン機能の実装
ログイン成功時画面。
ログイン失敗時の画面
ログインページを実装すると、「ログイン」ボタンが開いています
1.ID入力ウィンドウに「@」を含める必要があります.
2.Passwordの長さは5個以上でなければなりません.
3.私が指定したIDとパスワードは正しくなければなりません(直接実施してください)
--ログインが許可されている機能のみ
私が書いたコード
import React from 'react';
import { withRouter } from 'react-router';
import './Login.scss';
import '../../../styles/common.scss';
class Login extends React.Component {
state = {
id: '',
password: '',
offButton: false,
};
handleIdInput = e => {
this.setState({
id: e.target.value,
});
};
handlePasswordInput = e => {
this.setState({
password: e.target.value,
});
};
goToMain = e => {
const { id, password } = this.state;
e.preventDefault();
{id === '[email protected]' && password === 'tkdas6708@'
? this.props.history.push('/Main-SangCheol')
: alert('아이디와 비밀번호를 확인해주세요');
};
handleInputText = e => {
const { id, password } = this.state;
const isButtonActive = id.includes('@') && password.length >= 5;
this.setState({ offButton : isButtonActive });
};
render() {
const { offButton } = this.state
return (
<div className=" sangcheol-Login">
<section className="section">
<div className="inner">
<h1 className="logo-text">Westagram</h1>
<form onChange={this.handleInputText} className="input-box">
<input
type="text"
placeholder="전화번호, 사용자 이름 또는 이메일"
className="input-box_login"
onChange={this.handleIdInput}
/>
<input
type="password"
placeholder="비밀번호"
className="input-box_password"
onChange={this.handlePasswordInput}
/>
<button
className={offButton ? 'btnOn' : 'offButton'}
onClick={this.goToMain}
>
로그인
</button>
<a className="footer_link" href="Null">
비밀번호를 잊으셨나요 ?
</a>
</form>
</div>
</section>
</div>
);
}
}
export default withRouter(Login);
コード解釈
まずformtagには2つの入力があります
1.idを入力
2.パスワードの入力
3.ログインボタン
入力ごとにonChangeを行うと、実行する関数handleIdInputとhandlePasswordInputをpropsに入れます.
その後、ボタンにonClickが表示されると、goTomain関数で実行されます.
関数の動作
import React from 'react';
import { withRouter } from 'react-router';
import './Login.scss';
import '../../../styles/common.scss';
class Login extends React.Component {
state = {
id: '',
password: '',
offButton: false,
};
handleIdInput = e => {
this.setState({
id: e.target.value,
});
};
handlePasswordInput = e => {
this.setState({
password: e.target.value,
});
};
goToMain = e => {
const { id, password } = this.state;
e.preventDefault();
{id === '[email protected]' && password === 'tkdas6708@'
? this.props.history.push('/Main-SangCheol')
: alert('아이디와 비밀번호를 확인해주세요');
};
handleInputText = e => {
const { id, password } = this.state;
const isButtonActive = id.includes('@') && password.length >= 5;
this.setState({ offButton : isButtonActive });
};
render() {
const { offButton } = this.state
return (
<div className=" sangcheol-Login">
<section className="section">
<div className="inner">
<h1 className="logo-text">Westagram</h1>
<form onChange={this.handleInputText} className="input-box">
<input
type="text"
placeholder="전화번호, 사용자 이름 또는 이메일"
className="input-box_login"
onChange={this.handleIdInput}
/>
<input
type="password"
placeholder="비밀번호"
className="input-box_password"
onChange={this.handlePasswordInput}
/>
<button
className={offButton ? 'btnOn' : 'offButton'}
onClick={this.goToMain}
>
로그인
</button>
<a className="footer_link" href="Null">
비밀번호를 잊으셨나요 ?
</a>
</form>
</div>
</section>
</div>
);
}
}
export default withRouter(Login);
handleIdInput
関数入力idの入力中にonChangeイベントが発生した場合(テキストが入力された場合)stateが再ロードされるにつれて、テキストに入力した値
state内部のidキー値に入ります.
handlePasswordInput
関数にも上記と同じpassword入力値が入力されると、ステータスは再ロードされ、私が入力したテキストはステータス内部のpasswordキー値に入ります.goToMain
関数は、フォームタグにsubmitが発生したときに機能する関数であり、まずステータス値を構造分解割り当てとして受信し、submitのデフォルト動作のリフレッシュを阻止する.(e.preventDefalut())その後、idとpasswordに入力した値が私が指定した値と一致する場合は、ルータを使用してMainFeedページに移動します.
ただし、ボタンの3つの演算子としてクラスを使用し、stateの値がfalseの場合、offButtonクラスはボタンがアクティブにならないため色がありません.
ステータス値がtrueに変更された場合、ボタンはアクティブになります.
ステータス値をtrueに変更するためにonchangeがフォーム上でアクションを実行する場合、handleInputText関数はこのアクションを実行し、この関数の役割は次のとおりです.
stateは構造分解割当として受信し、変数isButtonActiveで
idには「@」が含まれており、password長が5より大きい場合、変数は真である.
state内部のoffButtonキー値をisButtonActive(true)に入れます.
Reference
この問題について(Instagramクローン-LOgin Page), 我々は、より多くの情報をここで見つけました https://velog.io/@zlrz6706/인스타그램-클론テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol