Reactフォームとイベントを詳しく分析します。
この章では、どのようにReactにフォームを使うかを議論します。
HTMLフォーム要素は、Reactの他のDOM要素とは異なり、フォーム要素が内部状態を生来保持しているためである。
HTMLでは、「input」「textarea」「select」といったフォーム要素が自身の状態を維持し、ユーザーの入力に応じて更新されます。しかし、Reactでは、可変の状態は一般にコンポーネントの状態属性に保存され、set State()方法のみで更新される。
簡単な例
例では、入力ボックスinput値value={this.state.data}を設定します。入力枠の値が変化した時にstateを更新することができます。私たちはオンチャン事件を使ってinputの変化を監督し、stateを修正することができます。
実例2
以下の例では、どのようにサブアセンブリにフォームを使用するかを示します。オンChange方法は、stateの更新をトリガし、更新された値をサブアセンブリの入力ボックスのvalueに転送して、インターフェースを再レンダリングする。
あなたは親のコンポーネントでイベントのハンドルを作成し、プロップとしてあなたのサブコンポーネントに渡す必要があります。
Selectプルダウンメニュー
Reactでは、selected属性は使用されません。ルートのラベルに選択項目をvalue属性で表します。
複数のフォーム
複数のinput要素を処理している場合、各要素にname属性を付加することで、処理関数を
Reactイベント
次の例のデモは、OClickイベントによってデータを修正します。
以上はReactフォームとイベントの詳細を分析しました。Reactフォームとイベントに関する資料は他の関連記事に注目してください。
HTMLフォーム要素は、Reactの他のDOM要素とは異なり、フォーム要素が内部状態を生来保持しているためである。
HTMLでは、「input」「textarea」「select」といったフォーム要素が自身の状態を維持し、ユーザーの入力に応じて更新されます。しかし、Reactでは、可変の状態は一般にコンポーネントの状態属性に保存され、set State()方法のみで更新される。
簡単な例
例では、入力ボックスinput値value={this.state.data}を設定します。入力枠の値が変化した時にstateを更新することができます。私たちはオンチャン事件を使ってinputの変化を監督し、stateを修正することができます。
class HelloMessage extends React.Component {
constructor(props) {
super(props);
this.state = {value: 'Hello jb51!'};
this.handleChange = this.handleChange.bind(this);
}
handleChange(event) {
this.setState({value: event.target.value});
}
render() {
var value = this.state.value;
return <div>
<input type="text" value={value} onChange={this.handleChange} />
<h4>{value}</h4>
</div>;
}
}
ReactDOM.render(
<HelloMessage />,
document.getElementById('example')
);
上のコードはHello jb 51の値をレンダリングします。のinput要素を使用して、オンChangeイベント応答によりユーザー入力の値を更新します。実例2
以下の例では、どのようにサブアセンブリにフォームを使用するかを示します。オンChange方法は、stateの更新をトリガし、更新された値をサブアセンブリの入力ボックスのvalueに転送して、インターフェースを再レンダリングする。
あなたは親のコンポーネントでイベントのハンドルを作成し、プロップとしてあなたのサブコンポーネントに渡す必要があります。
class Content extends React.Component {
render() {
return <div>
<input type="text" value={this.props.myDataProp} onChange={this.props.updateStateProp} />
<h4>{this.props.myDataProp}</h4>
</div>;
}
}
class HelloMessage extends React.Component {
constructor(props) {
super(props);
this.state = {value: 'Hello jb51!'};
this.handleChange = this.handleChange.bind(this);
}
handleChange(event) {
this.setState({value: event.target.value});
}
render() {
var value = this.state.value;
return <div>
<Content myDataProp = {value}
updateStateProp = {this.handleChange}></Content>
</div>;
}
}
ReactDOM.render(
<HelloMessage />,
document.getElementById('example')
);
実行結果Selectプルダウンメニュー
Reactでは、selected属性は使用されません。ルートのラベルに選択項目をvalue属性で表します。
class FlavorForm extends React.Component {
constructor(props) {
super(props);
this.state = {value: 'coconut'};
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(event) {
this.setState({value: event.target.value});
}
handleSubmit(event) {
alert('Your favorite flavor is: ' + this.state.value);
event.preventDefault();
}
render() {
return (
<form onSubmit={this.handleSubmit}>
<label>
<select value={this.state.value} onChange={this.handleChange}>
<option value="gg">Google</option>
<option value="rn">Runoob</option>
<option value="tb">Taobao</option>
<option value="fb">Facebook</option>
</select>
</label>
<input type="submit" value=" " />
</form>
);
}
}
ReactDOM.render(
<FlavorForm />,
document.getElementById('example')
);
実行結果複数のフォーム
複数のinput要素を処理している場合、各要素にname属性を付加することで、処理関数を
event.target.name
の値に基づいて何をするかを選択することができます。
class Reservation extends React.Component {
constructor(props) {
super(props);
this.state = {
isGoing: true,
numberOfGuests: 2
};
this.handleInputChange = this.handleInputChange.bind(this);
}
handleInputChange(event) {
const target = event.target;
const value = target.type === 'checkbox' ? target.checked : target.value;
const name = target.name;
this.setState({
[name]: value
});
}
render() {
return (
<form>
<label>
:
<input
name="isGoing"
type="checkbox"
checked={this.state.isGoing}
onChange={this.handleInputChange} />
</label>
<br />
<label>
:
<input
name="numberOfGuests"
type="number"
value={this.state.numberOfGuests}
onChange={this.handleInputChange} />
</label>
</form>
);
}
}
出力結果Reactイベント
次の例のデモは、OClickイベントによってデータを修正します。
class HelloMessage extends React.Component {
constructor(props) {
super(props);
this.state = {value: 'Hello jb51!'};
this.handleChange = this.handleChange.bind(this);
}
handleChange(event) {
this.setState({value: ' '})
}
render() {
var value = this.state.value;
return <div>
<button onClick={this.handleChange}> </button>
<h4>{value}</h4>
</div>;
}
}
ReactDOM.render(
<HelloMessage />,
document.getElementById('example')
);
親コンポーネントのstateをサブアセンブリから更新する必要がある場合、親コンポーネントでイベントのハンドルを作成し、プロとしてあなたのサブコンポーネントに渡す必要があります。実例は以下の通りです
class Content extends React.Component {
render() {
return <div>
<button onClick = {this.props.updateStateProp}> </button>
<h4>{this.props.myDataProp}</h4>
</div>
}
}
class HelloMessage extends React.Component {
constructor(props) {
super(props);
this.state = {value: 'Hello jb51!'};
this.handleChange = this.handleChange.bind(this);
}
handleChange(event) {
this.setState({value: ' '})
}
render() {
var value = this.state.value;
return <div>
<Content myDataProp = {value}
updateStateProp = {this.handleChange}></Content>
</div>;
}
}
ReactDOM.render(
<HelloMessage />,
document.getElementById('example')
);
実行結果以上はReactフォームとイベントの詳細を分析しました。Reactフォームとイベントに関する資料は他の関連記事に注目してください。