今回は簡単なログイン画面を作ってみたいと思います。
の前に・・余談ですがエディッタに
デフォルトだと
atom
を使っている場合、デフォルトだと
.jsx
ファイルを開いてもシンタックスハイライトされていません。
本当にただの余談でしたw
コンポーネント作成
構成は今まで通りで、今回は
まずは画面だけを作成します。
login.jsx
を新たに作成します。まずは画面だけを作成します。
login.jsx
を次のように実装します。import React from 'react';
import ReactDOM from 'react-dom'
class Login extends React.Component {
constructor() {
super();
this.state = {
msg: 'none'
};
this.handleSubmit = this.handleSubmit.bind(this);
}
handleSubmit(e) {
console.log('handleSubmit');
}
render() {
return (
<div className="login">
<h1>Login</h1>
<form className="loing form" onSubmit={this.handleSubmit}>
<input type="text" placeholder="Name" />
<input type="text" placeholder="Password" />
<input type="submit" value="Submit" />
</form>
<p>{this.state.msg}</p>
</div>
);
}
}
ReactDOM.render(
<Login />,
document.getElementById('container')
);
↑で
また、↑では
class
ではなくclassName
となっていますがclass
と同じ働きをします。また、↑では
Submit
ボタンを押してもコンソールにログが出るだけになってます。
実行結果
イベント処理
次にSubmitボタンを押したら入力された名前とパスワードを
画面に表示させてみたいと思います。
画面に表示させてみたいと思います。
まずは
input
にref
を追加します。- refとは? ・・・
input
などの要素にアクセスできるようにするもの
要素へアクセスするにはReactDOM.findDOMNode
を使う
という事で早速
ref
を追加してみます。<form className="loing form" onSubmit={this.handleSubmit}>
<input type="text" placeholder="Name" ref={(ref) => this.inputName = ref} />
<input type="text" placeholder="Password" ref={(ref) => this.inputPass = ref} />
<input type="submit" value="Submit" />
</form>
コールバックとして受け取った
ref
をthis.inputName
やthis.inputPass
に設定しています。
次に
handleSubmit
を次のように修正します。handleSubmit(e) {
e.preventDefault(); // デバッグ用
let name = ReactDOM.findDOMNode(this.inputName).value.trim();
let pass = ReactDOM.findDOMNode(this.inputPass).value.trim();
let message = `name[${name}] pass[${pass}]`;
this.setState({msg: message});
}
本来なら
遷移したりするのですが、今回はデモの為イベントを
止めています。
Submit
ボタンが押されたらサーバー側で処理してログイン後の画面に遷移したりするのですが、今回はデモの為イベントを
preventDefault
によって止めています。
this.inputName
やthis.inputPass
から値を取り出しメッセージを出力させています実行すると
input
に入力された内容が画面に表示されているかと思います。スタイルシート適用
className
で指定した部分にスタイルシートを適用させてみます。と言っても普通のCSSと変わりないです。
.login {
background: #e0ffff;
}
.form {
background: #fff8dc;
}
背景色を変更。リロードすると以下のようになります。
0 件のコメント:
コメントを投稿