[レスポンス]イベントシステム(Event)
イベントシステム
リアクターのイベントシステムはWebブラウザのHTMLイベントと同じインタフェースを持つため,使用方法は非常に似ている.
イベントの使用上の注意
アクティビティ名はキャメル記号で書きます
(ex.HTMLのonClickは、応答でonClickを使用して記述する必要があります.)
イベントで実行するJavaScriptコードではなく、関数形式の値を渡します.
矢印関数構文で関数を作成して渡すこともできます.
可読性のためには、レンダリング部分の外部で予め作成しておき、鳴くように伝達することが望ましい.
イベントはDOM要素でのみ設定できます.
div、button、input、form、spanなどのイベントを設定できますが、自分で作成したコンポーネントのイベントを設定することはできません.
イベントのタイプ
イベントハンドル
構成部品の作成とロード->onChangeイベントハンドル->ランダムメソッドの作成->input複数->onKeyPressイベントハンドル
構成部品の作成とロード
import React, { Component } from "react"; //EventPractice.js
class EventPractice extends Component {
render() {
return (
<div>
<h1>이벤트 연습</h1>
</div>
);
}
}
export default EventPractice;
import EventPractice from "./EventPractice"; // App.js
const App = () => {
return <EventPractice />;
};
export default App;
イベントハンドル
<input
type="text"
name="message"
placeholder="아무거나 입력해 보세요"
onChange={(e) => {
console.log(e.target.value);
}}
/>
input要素をレンダリングし、要素にonChangeイベントを処理するコードを記述します.e
オブジェクトは、WebブラウザのネイティブイベントをSyntheticEventで囲むオブジェクトです.onChangeイベントが発生した場合、その後の変更の入力値=(e.target.value)
stateに入力値を含める
constructorでステータス初期値を設定し、イベント処理関数でこの値を設定します.setStateメソッドを呼び出してstateを更新します.
class EventPractice extends Component {
state = {
message: "",
};
render() {
return (
<div>
<h1>이벤트 연습</h1>
<input
type="text"
name="message"
placeholder="아무거나 입력해 보세요"
value={this.state.message}
onChange={(e) => {
this.setState({
message: e.target.value,
});
}}
/>
</div>
);
}
}
ランダムメソッドの作成
パフォーマンス上、レンダリング時に関数を作成および転送する方法は、事前に作成および転送する方法とほとんど変わりません.
予め方法を決めて伝える方式の可読性はずっと高い.
import React, { Component } from "react";
class EventPractice extends Component {
state = {
message: "",
};
constructor(props) {
super(props);
this.handleChange = this.handleChange.bind(this);
this.handleClick = this.handleClick.bind(this);
}
handleChange(e) {
this.setState({
message: e.target.value,
});
}
handleClick() {
alert(this.state.message);
this.setState({
message: "",
});
}
render() {
return (
<div>
<h1>이벤트 연습</h1>
<input type="text" name="message" placeholder="아무거나 입력해 보세요" value={this.state.message} onChange={this.handleChange} />
<button onClick={this.handleClick}>확인</button>
</div>
);
}
}
export default EventPractice;
任意のメソッドを呼び出す場合、これは呼び出し元に依存するため、任意のメソッドがHTML要素イベントに登録される過程で、メソッドとthis
の関係が切断されます.いずれかの方法がイベントとして登録されている場合、方法および方法
this.handleChange.bind(this)
は、コンポーネント自体を指すようにバインドされる必要がある.バインドされていない場合、これは
undefined
を指します.Property Initializer Syntaxを使用した作成方法
メソッドバインドは、
생성자 메서드(constructor)
で行われる慣例である.しかし、メソッドを作成するたびに
constructor
度を変更するのは不便です.この作業をより簡単にするために、バーベルの
transform-class-properties
構文を使用して、矢印関数としてメソッドを定義できます.// 적용 전 메서드 정의
handleChange(e) {
this.setState({
message: e.target.value,
});
}
// 적용 후 메서드 정의
handleChange = (e) => {
this.setState({
message: e.target.value,
});
};
メソッドとthisをバインドする必要はありません.(this.handleChange.bind(this))コンストラクション関数メソッドを使用する必要はありません.
同じ方法で複数の入力を処理
handleChange = (e) => {
this.setState({
[e.target.name]: e.target.value,
});
};
<input type="text" name="username" placeholder="사용자명" onChange={this.handleChange} value={this.state.username} />
<input type="text" name="message" placeholder="아무거나 입력해보세요" onChange={this.handleChange} value={this.state.message} />
オブジェクトでkeyが[]
で囲まれている場合、その中に含まれるreprenceの値がkey値として使用されます.最初の入力では、メソッドが呼び出され、{username:e.target.value(入力した値)が呼び出されます.
2番目の入力は{message:e.target.value}です.
onKeyPressイベントハンドル
キーを押したときに発生するキーPressイベントを処理できます.
handleKeyPress = (e) => {
if (e.key === "Enter") {
this.handleClick();
}
};
<input type="text" name="message" placeholder="아무거나 입력해보세요" onKeyPress={this.handleKeyPress} onChange={this.handleChange} value={this.state.message} />
フォーカスが2番目のinput要素にある場合、Enterを押すとhandleKeyPressメソッドが実行されます.関数構成部品に変更
import React, { useState } from "react";
const EventPractice = () => {
const [username, setUsername] = useState("");
const [message, setMessage] = useState("");
const onChangeUsername = (e) => setUsername(e.target.value);
const onChangeMessage = (e) => setMessage(e.target.value);
const onClick = () => {
alert(username + ": " + message);
setUsername("");
setMessage("");
};
const onKeyPress = (e) => {
if (e.key === "Enter") {
onClick();
}
};
return (
<div>
<h1>이벤트 연습</h1>
<input type="text" name="username" placeholder="사용자명" value={username} onChange={onChangeUsername} />
<input type="text" name="message" placeholder="아무거나 입력해보세요" value={message} onChange={onChangeMessage} onKeyPress={onKeyPress} />
<button onClick={onClick}>확인</button>
</div>
);
};
export default EventPractice;
Reference
この問題について([レスポンス]イベントシステム(Event)), 我々は、より多くの情報をここで見つけました https://velog.io/@s_sangs/React-이벤트-시스템-Eventテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol