Reactでコンポーネントの状態を変更する方法
react では、setState() を使用してコンポーネントの状態を変更できます。 setState()は、コンポーネントの状態を更新するためのメソッドです。このメソッドは、コンポーネントの状態への変更をキューに入れ、最新の状態を取得することもできます。構文は、「this.setState({変更するデータの一部 })」です。
#このチュートリアルの動作環境: Windows7 システム、react18 バージョン、Dell G3 コンピューター。
##1. ステートフル コンポーネントとステートレス コンポーネント
#1. まず状態とは何かを理解します:
は、
特定の瞬間における物事の形状を記述するために使用されるデータであり、一般に
状態と呼ばれます。 (状態がデータであると単純に理解できます)例: 9 月 23 日の書籍の在庫数量、18 歳時の身長。vue にも関連する概念があります
機能:
変更可能。変更後、ビューには対応する変更が加えられます (双方向データ バインディング)
2. ステートフル コンポーネントとステートレス コンポーネント
ステートフル コンポーネント: 状態を定義できるコンポーネント。 クラスコンポーネント
はステートフルコンポーネントです。ステートレスコンポーネント: 状態を定義できないコンポーネント。 関数コンポーネント
は、ステートレスコンポーネントとも呼ばれます注:
2019年2月6日、React 16.8バージョンReactでフックは、機能コンポーネントが独自の状態も定義できるように導入されています。 [関連する推奨事項: Redis ビデオ チュートリアル
、プログラミング教育 ]この記事では主に クラス コンポーネントのステータスについて説明します
3. クラスコンポーネントの状態
1) 状態を定義します
初期化には state = { }
を使用しますimport React from "react"; export default class Hello extends React.Component { // 这里的state就是状态 state = { list: [{ id: 1, name: "给我一个div" }], isLoading : true }; }
2) ビュー 2 で render() { return ( <> <h1>姓名-{this.state.name}</h1> <ul> {this.state.list.map((item) => ( <li key={item.id}>{item.name}</li> ))} </ul> <div>{this.state.isLoading ? "正在加载" : "加载完成"}</div> </> ); }
1. 形式
##<要素 イベント名 1={イベント処理関数 1} イベント名 2={イベント処理関数 2} >>要素>
\
Note
:
React イベント名には、onMouseEnter、onFocus、onClick...
2 などのキャメル ケースの名前が使用されます。例import React from 'react' import ReactDOM from 'react-dom' const title = <h1>react中的事件</h1> export default class Hello extends React.Component { fn() { console.log('mouseEnter事件') } render() { return ( <div onClick = { () => console.log('click事件') } onMouseEnte r = { this.fn } </div> ) } } const content = ( <div> {title} {<Hello />} </div> ) ReactDOM.render ( content , document.getElementById ('root') )
#注:
イベント名はキャメルケースの命名形式です
- #クラス
- #this . fn
- Don't
かっこを追加しないでください:
- ##onClick={ this.fn( ) }
このとき、最初に fn() が呼び出され、その後 fn の実行結果がクリックイベントの処理関数として使用されます
- これを忘れずに書いてください
- これを忘れずに書いてください
#1. 問題コード:
class App extends React.Component {
// 组件状态
state = {
msg: 'hello react'
}
// 事件处理函数
handleClick() {
console.log(this) // 这里的this是 undefined
}
render() {
console.log(this) // 这里的this是当前的组件实例 App
return (
<div>
<button onClick={this.handleClick}>点我</button>
</div>
)
}
}
ログイン後にコピー結果は次のようになります:
class App extends React.Component { // 组件状态 state = { msg: 'hello react' } // 事件处理函数 handleClick() { console.log(this) // 这里的this是 undefined } render() { console.log(this) // 这里的this是当前的组件实例 App return ( <div> <button onClick={this.handleClick}>点我</button> </div> ) } }
render メソッド内のこれは、現在の React コンポーネントを指します。 イベント ハンドラー内のこれは、
unknown
- 2 を指します。理由:
クラス
クラスとモジュールの内部はデフォルトで strict モードになっているため、実行モードを指定するために
を使用する必要はありません。コードがクラスまたはモジュールに記述されている限り、使用できるのは厳密モードのみであるため、クラス内の関数 this は未定義
3 を指します。イベント関数 this が指すものを解決します:
方法 1:
イベント ハンドラーで矢印関数をラップする
欠点: 追加の矢印を追加する必要があります。ハンドラー関数の外側にラップされています 関数、構造が美しくありません利点:
前述したように、{this.handleClick () で処理関数を呼び出すときに括弧を追加しないでください。 }
, それ以外の場合、プログラムはすぐに実行されます。アロー関数を外側にラップした後、括弧を追加するだけでなく、パラメーターを渡すこともできます。
class App extends React.Component { state = { msg: 'hello react' } handleClick () { console.log(this.state.msg) } render () { return ( <div> <button onClick={ () => { this.handleClick ( ) }}>点我</button> </div> ) } }
bind() メソッドを使用して関数のこのポインターを変更し、関数の特徴的な解決策を実行しないでください
class App extends React.Component { state = { msg: 'hello react' } handleClick () { console.log(this.state.msg) } render () { return ( <div> <button onClick={ this.handleClick.bind (this) }>点我</button> </div> ) } }
方法 3:
クラスでイベント処理関数を宣言するときに、アロー関数を直接使用します。
class App extends React.Component { state = { msg: 'hello react' } handleClick = () => { console.log(this.state.msg) } render() { return ( <div> <button onClick={this.handleClick}>点我</button> </div> ) } }
利点:コードは簡潔で直感的で、最もよく使用されます。メソッド
4. コンポーネントのステータスを変更します
##注:
渡すことはできません ビューを変更するにはステート内の値を直接変更してください! ! !this.setState() メソッドを通じて変更してください
react では setstate が使用されるメソッドですコンポーネントの状態を更新するには、 state ;setState() はコンポーネントの状態への変更をキューに入れ、更新された状態でこのコンポーネントとそのサブコンポーネントを再レンダリングする必要があることを React に通知します。
1.语法:
语法:this.setState( { 要修改的部分数据 } )
这是继承自React.Component
的修改类组件状态的方法
state = { count: 0, list: [1, 2, 3], person: { name: 'jack', age: 18 } } // 【不推荐】直接修改当前值的操作: this.state.count++ ++this.state.count this.state.count += 1 this.state.count = 1 this.state.list.push(4) this.state.person.name = 'rose' // 【推荐】不是直接修改当前值,而是创建新值的操作: this.setState({ count: this.state.count + 1, list: [...this.state.list, 4], person: { ...this.state.person, // 要修改的属性,会覆盖原来的属性,这样,就可以达到修改对象中属性的目的了 name: 'rose' } })
五、表单处理-受控组件
- HTML中表单元素是可输入的,即表单维护着自己的可变状态(value)。
- 但是在react中,可变状态通常是保存在state中的,并且要求状态只能通过
setState
进行修改。 - React中将state中的数据与表单元素的value值绑定到了一起,
由state的值来控制表单元素的值
- 受控组件:value值受到了react控制的表单元素
示例代码:
class App extends React.Component { state = { msg: 'hello react' } handleChange = (e) => { this.setState({ msg: e.target.value }) } // value 绑定state 配合onChange事件双向绑定 render() { return ( <div> <input type="text" value={this.state.msg} onChange={this.handleChange}/> </div> ) } }
注意事项:
使用受控组件的方式处理表单元素后,状态的值就是表单元素的值。即:想要操作表单元素的值,只需要通过this.setState( { 要修改的部分数据 } )
操作对应的状态即可
六、表单处理-非受控组件-ref
- 受控组件是通过 React 组件的状态来控制表单元素的值
- 非受控组件是通过手动操作 DOM 的方式来控制
- ref:用来在 React 中获取 DOM 元素
示例代码:
import { createRef } from 'react' class Hello extends Component { txtRef = createRef() handleClick = () => { // 文本框对应的 DOM 元素 // console.log(this.txtRef.current) // 文本框的值: console.log(this.txtRef.current.value) } render() { return ( <div> <input ref={this.txtRef} /> <button onClick={handleClick}>获取文本框的值</button> </div> ) } }
(学习视频分享:编程基础视频)
以上がReactでコンポーネントの状態を変更する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック

ノンブロッキングおよびイベント駆動に基づいて構築されたノード サービスには、メモリ消費量が少ないという利点があり、大量のネットワーク リクエストの処理に非常に適しています。大量のリクエストを前提として、「メモリ制御」に関する問題を考慮する必要があります。 1. V8 のガベージ コレクション メカニズムとメモリ制限 Js はガベージ コレクション マシンによって制御されます

ファイル モジュールは、ファイルの読み取り/書き込み/開く/閉じる/削除の追加など、基礎となるファイル操作をカプセル化したものです。ファイル モジュールの最大の特徴は、すべてのメソッドが **同期** と ** の 2 つのバージョンを提供することです。 asynchronous**、sync サフィックスが付いているメソッドはすべて同期メソッドであり、持たないメソッドはすべて異種メソッドです。

Vue.js は、今日のフロントエンド開発において非常に人気のあるフレームワークとなっています。 Vue.js が進化し続けるにつれて、単体テストの重要性がますます高まっています。今日は、Vue.js 3 で単体テストを作成する方法を検討し、いくつかのベスト プラクティスと一般的な問題と解決策を提供します。

PHP と Vue: フロントエンド開発ツールの完璧な組み合わせ 今日のインターネットの急速な発展の時代において、フロントエンド開発はますます重要になっています。 Web サイトやアプリケーションのエクスペリエンスに対するユーザーの要求がますます高まっているため、フロントエンド開発者は、より効率的で柔軟なツールを使用して、応答性の高いインタラクティブなインターフェイスを作成する必要があります。フロントエンド開発の分野における 2 つの重要なテクノロジーである PHP と Vue.js は、組み合わせることで完璧なツールと見なされます。この記事では、PHP と Vue の組み合わせと、読者がこれら 2 つをよりよく理解し、適用できるようにするための詳細なコード例について説明します。

クロスドメインは開発においてよく遭遇するシナリオであり、インタビューでもよく議論される問題でもあります。一般的なクロスドメイン ソリューションとその背後にある原則を習得すると、開発効率が向上するだけでなく、面接でのパフォーマンスも向上します。

インターネット技術の発展に伴い、フロントエンド開発の重要性がますます高まっています。特にモバイル デバイスの人気により、効率的で安定しており、安全で保守が容易なフロントエンド開発テクノロジーが必要です。 Go 言語は、急速に発展しているプログラミング言語として、ますます多くの開発者によって使用されています。では、フロントエンド開発に Go 言語を使用することは可能でしょうか?次に、この記事ではフロントエンド開発にGo言語を使用する方法を詳しく説明します。まずはフロントエンド開発にGo言語が使われる理由を見てみましょう。多くの人は Go 言語は

フロントエンド開発のインタビューでは、HTML/CSS の基本、JavaScript の基本、フレームワークとライブラリ、プロジェクトの経験、アルゴリズムとデータ構造、パフォーマンスの最適化、クロスドメイン リクエスト、フロントエンド エンジニアリング、デザインパターン、新しいテクノロジーとトレンド。面接官の質問は、候補者の技術スキル、プロジェクトの経験、業界のトレンドの理解を評価するように設計されています。したがって、候補者はこれらの分野で自分の能力と専門知識を証明するために十分な準備をしておく必要があります。

当初、JS はブラウザ側でのみ動作していたため、Unicode でエンコードされた文字列の処理は簡単でしたが、バイナリ文字列や非 Unicode エンコード文字列の処理は困難でした。バイナリは、コンピュータのビデオ/オーディオ/プログラム/ネットワーク パッケージの最低レベルのデータ形式です。
