REACT 3
8521 ワード
ブログの内容は次のとおりです.
Programming with Mosh React Tutorial for Beginners [React js]
勉強の過程で書いたものです.
<合成コード>Handling Events
setState()法は反応器の状態が変化することを伝える方法である. その後、ステータスが変化した場合、render()が再呼び出される.これをレンダー と呼びますですがsetstate()は非同期なので、renderをいつ呼び出すかは期待できません. いずれにしてもrenderを呼び出すと仮想DOMが作成されます.new treeとold treeを比較すると、反応器は変更した要素のみを更新します.
実際にボタンをクリックしますが、formatCount()に変更し、spanラベルとformatCount()のみを更新します.
https://ko.reactjs.org/docs/getting-started.html
https://www.youtube.com/watch?v=Ke90Tje7VS0&t=916s
Programming with Mosh React Tutorial for Beginners [React js]
勉強の過程で書いたものです.
<合成コード>
import React, { Component, Fragment } from 'react';
class Counter extends Component {
state = {
count : 1,
tags: ["tag1", "tag2", "tag3"]
};
render() {
return (
<Fragment>
<span className={this.getBadgeClasses()}>{this.formatCount()}</span>
<button className="btn btn-secondary btn-sm">Increment</button>
<ul>{this.state.tags.map(tag => <li key={tag} >{tag}</li>)}</ul>
</Fragment>
);
}
getBadgeClasses() {
let classes = "badge m-2 badge-";
classes += this.state.count === 0 ? "warning" : "primary"; //엘로우 블루
return classes;
}
formatCount() {
const {count} = this.state;
const x = "ZERO";
return count === 0 ? x : count;
}
}
export default Counter;
Handling Events
次に、ユーザーがボタンをクリックすると、カートの数字が増加するようにコードを作成します.バニラjavascriptはaddEventListenerと似た概念である.
クリック時に開始する関数を作成し、クリックするボタンを編集します.handleIncrement () {
console.log("Increment Clicked", this);
// 클릭시 호출될 메서드
<button onClick={this.handleIncrement} className="btn btn-secondary btn-sm">Increment</button>
// Button에 onClick을 이용해서 메서드와 연결
ここで注意すべき点は、JSXはhandleIncrement()ではなくhandleIncrement()を使用してコードを記述する必要があることです.呼び出しをスキップした結果ではなく、クリックするたびに呼び出されるからです.
前述したように、クリックするとIncrement Clickedが出力されますが、この出力は未定義になります.問題を解決しよう
Binding
上記の結果が出たのはjavascriptでは,thisが偶数のオブジェクトになる理由がないためである.オブジェクトでは、メソッドはそのメソッドを含むobjectを指すためです.したがって、メソッドとthisの関係には「バインド」が使用されます.handleIncrement = () => {
console.log("Increment Clicked", this);
}
バインドは、次のArow関数を使用して実行できます.(ジェネレータによるベースバインドの詳細については、次を参照してください)
https://ko.reactjs.org/docs/handling-events.html
パラメータがある場合は、匿名関数処理後に渡す必要があります.() => handleIncrement(매개변수명)
updating state handleIncrement = () => {
console.log("Increment Clicked", this);
this.state.count++;
}
ここで,クリック時値の増加を実現するために,コードを修正した.
しかし、実際にはクリックするたびに値は増加しません.反応器はsetState()法を用いて状態を動的に管理するためである.handleIncrement = () => {
console.log("Increment Clicked", this);
this.setState({count: this.state.count + 1});
}
前述したように変更すると、正常に動作します.
setState()プロパティ
setState()の特性を見てみましょう.
handleIncrement () {
console.log("Increment Clicked", this);
// 클릭시 호출될 메서드
<button onClick={this.handleIncrement} className="btn btn-secondary btn-sm">Increment</button>
// Button에 onClick을 이용해서 메서드와 연결
上記の結果が出たのはjavascriptでは,thisが偶数のオブジェクトになる理由がないためである.オブジェクトでは、メソッドはそのメソッドを含むobjectを指すためです.したがって、メソッドとthisの関係には「バインド」が使用されます.
handleIncrement = () => {
console.log("Increment Clicked", this);
}
バインドは、次のArow関数を使用して実行できます.(ジェネレータによるベースバインドの詳細については、次を参照してください)https://ko.reactjs.org/docs/handling-events.html
パラメータがある場合は、匿名関数処理後に渡す必要があります.
() => handleIncrement(매개변수명)
updating state handleIncrement = () => {
console.log("Increment Clicked", this);
this.state.count++;
}
ここで,クリック時値の増加を実現するために,コードを修正した.
しかし、実際にはクリックするたびに値は増加しません.反応器はsetState()法を用いて状態を動的に管理するためである.handleIncrement = () => {
console.log("Increment Clicked", this);
this.setState({count: this.state.count + 1});
}
前述したように変更すると、正常に動作します.
setState()プロパティ
setState()の特性を見てみましょう.
handleIncrement = () => {
console.log("Increment Clicked", this);
this.state.count++;
}
handleIncrement = () => {
console.log("Increment Clicked", this);
this.setState({count: this.state.count + 1});
}
setState()の特性を見てみましょう.
実際にボタンをクリックしますが、formatCount()に変更し、spanラベルとformatCount()のみを更新します.
render() {
return (
<Fragment>
<span className={this.getBadgeClasses()}>{this.formatCount()}</span>
<button className="btn btn-secondary btn-sm">Increment</button>
<ul>{this.state.tags.map(tag => <li key={tag} >{tag}</li>)}</ul>
</Fragment>
);
}
参考資料https://ko.reactjs.org/docs/getting-started.html
https://www.youtube.com/watch?v=Ke90Tje7VS0&t=916s
Reference
この問題について(REACT 3), 我々は、より多くの情報をここで見つけました https://velog.io/@fdsa09876/qweテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol