//Text
var InpTxt = React.createClass({
getInitialState: function(){
return {dispTxt: ''};
},
uqInput: function(e){
this.setState({dispTxt: e.target.value});
console.log(this.state.dispTxt);
},
render: function(){
return (<div>Input Text: <input type='text' value={this.state.dispTxt} onChange={this.uqInput} placeholder='入力欄' /></div>);
}
});
ReactDOM.render(
<InpTxt />,
document.getElementById('hoge1')
);
//Radio Button
var RadioBtn = React.createClass({
getInitialState: function(){
return {select: 'fst'};
},
uqRadio: function(e){
console.log(e.target.value);
this.setState({select: e.target.value});//'select'ステートにvalueを設定
},
render: function(){
return (<div>一つ選びなさい :
<div>
<input
type='radio'
value='fst'
checked={this.state.select === 'fst'} //'select'ステートに設定されたvalueと等値であればtrue
onChange={this.uqRadio}
/>選択1
</div>
<div>
<input
type='radio'
value='snd'
checked={this.state.select === 'snd'}
onChange={this.uqRadio}
/>選択2
</div>
<div>
<input
type='radio'
value='trd'
checked={this.state.select === 'trd'}
onChange={this.uqRadio}
/>選択3
</div>
</div>);
}
});
ReactDOM.render(
<RadioBtn />,
document.getElementById('hoge2')
);
//CheckBox
var CheckBox = React.createClass({
getInitialState: function(){
return {select: this.props.select};
// return {select: ['fst']};// 初期値として'選択1'のみ配列に設定
},
uqCheckBox: function(e){
var selectArr = this.state.select;// ステートを変数に代入
var ind = selectArr.indexOf(e.target.value);// 選択されたチェックボックスがあった場合のindexを調べる
if(e.target.checked){
selectArr.push(e.target.value); //配列に値を挿入
}else{
selectArr.splice(ind, 1); //配列中の調べたindexにある値を削除
}
this.setState({select: selectArr});// 変数からステートに戻す
console.log(this.state.select);
},
render: function(){
return(<div>選びなさい(複数可)
<div>
<input
type='checkbox'
value='fst'
checked={this.state.select.indexOf('fst') !==-1}// ステートの配列に'fst'の有無を調べる
onChange={this.uqCheckBox}
/>選択1
</div>
<div>
<input
type='checkbox'
value='snd'
checked={this.state.select.indexOf('snd') !==-1}
onChange={this.uqCheckBox}
/>選択2
</div>
<div>
<input
type='checkbox'
value='trd'
checked={this.state.select.indexOf('trd') !==-1}
onChange={this.uqCheckBox}
/>選択3
</div>
</div>);
}
});
ReactDOM.render(
<CheckBox select={['fst', 'snd']} />,
document.getElementById('hoge3')
);
//Select
var SelectSingle = React.createClass({
getInitialState: function(){
return {selected: this.props.selected};// ReactDOM内プロパティselectedの値を取得
},
uqSelect: function(e){
console.log(e.target.value);
this.setState({selected: e.target.value});//イベント対象の値をステートに設定
},
render: function(){
return(<div>選びなさい:
<select
onChange={this.uqSelect}// onChange属性にメソッドを設定
multiple={false}
value={this.state.selected}>
<option value="fst">選択1</option>
<option value="snd">選択2</option>
<option value="trd">選択3</option>
</select>
</div>);
}
});
ReactDOM.render(
<SelectSingle selected={'fst'} />,
document.getElementById('hoge4')
);
//Select Plural
var SelectPlural = React.createClass({
getInitialState: function(){
return {selected: this.props.selected};// ReactDOM内プロパティselectedの値を取得
},
uqSelect: function(e){
var selectedArr = this.state.selected;
var ind = selectedArr.indexOf(e.target.value);
if(ind === -1){
selectedArr.push(e.target.value);
} else {
selectedArr.splice(ind, 1);
}
this.setState({selected: selectedArr});//イベント対象の値をステートに設定
console.log(this.state.selected);
},
render: function(){
return(<div>選びなさい(複数可):
<select
onChange={this.uqSelect}// onChange属性にメソッドを設定
multiple={true}
value={this.state.selected}
size="2">
<option value="fst">選択1</option>
<option value="snd">選択2</option>
<option value="trd">選択3</option>
</select>
</div>);
}
});
ReactDOM.render(
<SelectPlural selected={['fst','snd']} />,
document.getElementById('hoge4')
);
//submit
var SubmitBtn = React.createClass({
getInitialState: function(){
return {selected: this.props.selected};
},
uqCheckBox: function(e){
var selectedArr = this.state.selected
var ind = selectedArr.indexOf(e.target.value);
if(e.target.checked){
selectedArr.push(e.target.value);
}else{
selectedArr.splice(ind, 1);
}
this.setState({selected: selectedArr});
},
uqSubmit: function(e){
e.preventDefault();// JSのpreventDefault()を使用しブラウザ機能による送信処理をキャンセル
if(this.state.selected.length < 2)// 配列の値が二つ未満の場合、returnでuqSubmitを終了させる
return;
console.log(this.state.selected);
this.setState({selected: []});// SUBMIT後、配列を空にする
},
render: function(){
return (<form onSubmit = {this.uqSubmit}>二つ以上選びなさい:
<div>
<input
type="checkbox"
value="fst"
checked={this.state.selected.indexOf('fst') !== -1}
onChange={this.uqCheckBox}
/>選択1
</div>
<div>
<input
type="checkbox"
value="snd"
checked={this.state.selected.indexOf('snd') !== -1}
onChange={this.uqCheckBox}
/>選択2
</div>
<div>
<input
type="checkbox"
value="trd"
checked={this.state.selected.indexOf('trd') !== -1}
onChange={this.uqCheckBox}
/>選択3
</div>
<input type="submit" value="SUBMIT"/*5*/ />
</form>);
}
});
ReactDOM.render(
<SubmitBtn selected={[]}/>,
document.getElementById('hoge5')
);
See the Pen React: form parts by nwstcode (@nwst) on CodePen.