状態の変更に反応するメソッドは何ですか?
反応して状態を変更するメソッドは次のとおりです: 1. 「this.setState({title:'React'});」メソッドを通じて状態を変更します; 2. 「this.setState((preState, props) を通じて」 => ;counter:preState.quantity 1)" メソッドで状態を変更します。 3. "replaceState" メソッドでコンポーネントの状態を変更します。
このチュートリアルの動作環境: Windows 10 システム、react18.0.0 バージョン、Dell G3 コンピューター。
react で状態を変更する方法は何ですか?
react で状態を正しく変更する
まず、react では this.state.{property} を通じて直接状態を取得できますが、状態を変更したい場合には注意が必要な落とし穴がたくさんあります。 #一般的なトラップは次の 3 つです:
状態を直接変更することはできません。コンポーネントは状態を直接変更し、レンダリングを再トリガーしません。例:
this.state.title='React';
this.setState({title:'React'});
状態の更新は非同期ですsetState が呼び出されると、コンポーネントの状態は次のようになります。すぐには更新されませんが、変更される状態をイベント キューに入れ、react は実際の実行タイミングを最適化します。また、独自のパフォーマンス上の理由から、複数の setState 状態変更が 1 つの状態変更にマージされる場合があります。したがって、現在の状態に依存して次の状態を計算しないでください。状態の変更が実際に実行されるとき、依存する this.state が最新の状態であることが保証されない場合があります。反応自体が複数の状態を 1 つにマージするためです。状態はまだ古い状態のままであるため、プロパティの更新も非同期であるため、現在のプロパティに依存して次の状態を計算することはできません。例えば、よく使われるreactの例では、プラス記号をクリックして値を1つ増やす操作があり、1回クリックすると数値が1増加し、2回連続でクリックすると数値が増加します。これは、react がマージされ、one に変更されるときです。これは、次のコードを実行するのと同じです:
Object.assign( previousState, {quantity:this.state.quantity+1}, {quantity:this.state.quantity+1}, )
this.setState((preState, props)=>counter:preState.quantity+1)
状態の更新はマージ プロセスですコンポーネントを変更するために ssetState を呼び出すときコンポーネントの状態の更新はマージプロセスであるため、状態に入るときは、完全な状態ではなく、変更された状態だけを渡す必要があります。たとえば、コンポーネントの状態は次のようになります:
this.state={ title:'React', content:'React is an wondeful JS library' }
this.setState({title:'ReactJs'});
this.state={ title:'ReactJs, content:''React is an wondeful Js library }
状態のタイプは不変型です。 (数値、文字列、ブール、ブル、未定義)状態が不変型であるため、この状況は最も単純で、変更する状態に新しい値を割り当てるだけです。 、変更したいカウントは数値です。タイプ、タイトル (文字列)、成功 (ブール値) の 3 つの状態:
this.setState({ count:1, title:'React', success:true })
ステータスのタイプは次のとおりです。配列ステートブックの配列型がある場合、ブックにブックを追加したい場合は、配列の concat メソッドまたは es6 の拡張構文 (apread 構文) を使用できます。 方法 1: preState、concat を使用して新しい配列を作成する
this.setState((preState)=>books:preState.books.concat(['React Guide']))
this.setState(preState=>books:[...preState,''React Guide])
this.setState(preState=>books:preState.books.slice(1,3))
this.setState(preState => { books: preState.books.filter(item => { return item != 'React'; }) })
this.setState({ onwer:Object.assgin({},preState.onwer,{name:'Jason'}); })
this.setState(preState=>{ owner:{...preState.owner,name:'Jason'} })
总结:
创建新的状态的关键是,避免使用会直接修改原对象的方法而是使用可以返回一个新对象的方法,当然可以使用Immutable的JS库(Immutable.js)实现类似的效果。
思考:
为什么React推荐组件状态的修改时不可变对象呢?
- 不可变对象的修改会返回一个新的对象,不用担心原对象在不小心的情况下修改导致的错误,方便程序的管理和调试
- 处于性能的考虑,对象组件的状态是不可变对象时,在组件的shouldComponentUpdate方法中仅需要比较前后两次状态对象的引用就可以判断状态是否真的改变,从而避免不必要的render调用
三:除了以上方法修改react组件的状态之外,我们还经常会用到replaceState改变组件的状态
replaceState()方法与setState()类似,但是方法只会保留nextState中状态,原state不在nextState中的状态都会被删除。使用语法:
replaceState(object nextState,[, function callback])
nextState,将要设置的新状态,该状态会替换当前的state。
callback,可选参数,回调函数。该函数会在replaceState设置成功,且组件重新渲染后调用。
如:
class App extends React.Component{ constructor(props); this.state={ count:1 title:'数字计算' } } handleClick=()=>{ this.replaceState({ count:this.state.count+1 }) } render(){ return( <button onClick={this.onClick}>点我</button> ) } }
结果为:
{ count:1 }
以上が状態の変更に反応するメソッドは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

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

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

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

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

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

ホットトピック











React と RabbitMQ を使用して信頼性の高いメッセージング アプリケーションを構築する方法 はじめに: 最新のアプリケーションは、リアルタイム更新やデータ同期などの機能を実現するために、信頼性の高いメッセージングをサポートする必要があります。 React はユーザー インターフェイスを構築するための人気のある JavaScript ライブラリであり、RabbitMQ は信頼性の高いメッセージング ミドルウェアです。この記事では、React と RabbitMQ を組み合わせて信頼性の高いメッセージング アプリケーションを構築する方法を紹介し、具体的なコード例を示します。 RabbitMQ の概要:

ReactRouter ユーザーガイド: フロントエンドルーティング制御の実装方法 シングルページアプリケーションの人気に伴い、フロントエンドルーティングは無視できない重要な部分になりました。 React エコシステムで最も人気のあるルーティング ライブラリとして、ReactRouter は豊富な機能と使いやすい API を提供し、フロントエンド ルーティングの実装を非常にシンプルかつ柔軟にします。この記事では、ReactRouter の使用方法と具体的なコード例を紹介します。 ReactRouter を最初にインストールするには、次のものが必要です

PHP、Vue、React: 最適なフロントエンド フレームワークを選択するには?インターネット技術の継続的な発展に伴い、フロントエンド フレームワークは Web 開発において重要な役割を果たしています。 PHP、Vue、React は 3 つの代表的なフロントエンド フレームワークであり、それぞれに独自の特徴と利点があります。使用するフロントエンド フレームワークを選択するとき、開発者はプロジェクトのニーズ、チームのスキル、個人の好みに基づいて情報に基づいた決定を下す必要があります。この記事では、PHP、Vue、React の 3 つのフロントエンド フレームワークの特徴と用途を比較します。

Java フレームワークと React フレームワークの統合: 手順: バックエンド Java フレームワークをセットアップします。プロジェクト構造を作成します。ビルドツールを設定します。 React アプリケーションを作成します。 REST API エンドポイントを作成します。通信メカニズムを構成します。実際のケース (SpringBoot+React): Java コード: RESTfulAPI コントローラーを定義します。 React コード: API によって返されたデータを取得して表示します。

React を使用して応答性の高いバックエンド管理システムを開発する方法 インターネットの急速な発展に伴い、日々の業務を処理するために効率的で柔軟で管理が容易なバックエンド管理システムを必要とする企業や組織が増えています。現在最も人気のある JavaScript ライブラリの 1 つである React は、ユーザー インターフェイスを構築するための簡潔で効率的かつ保守しやすい方法を提供します。この記事では、React を使用して応答性の高いバックエンド管理システムを開発する方法と、具体的なコード例を紹介します。まず React プロジェクトを作成します

VUE.JSは、中小規模のプロジェクトや迅速な反復に適していますが、Reactは大規模で複雑なアプリケーションに適しています。 1)Vue.jsは使いやすく、チームが不十分な状況やプロジェクトスケールが小さい状況に適しています。 2)Reactにはより豊富なエコシステムがあり、高性能で複雑な機能的ニーズを持つプロジェクトに適しています。

ReactはJSXとHTMLを組み合わせてユーザーエクスペリエンスを向上させます。 1)JSXはHTMLを埋め込み、開発をより直感的にします。 2)仮想DOMメカニズムは、パフォーマンスを最適化し、DOM操作を削減します。 3)保守性を向上させるコンポーネントベースの管理UI。 4)国家管理とイベント処理は、インタラクティブ性を高めます。

React には、イベント処理関数、useEffect や useCallback、上位コンポーネントなどのクロージャがあります。詳細な紹介: 1. イベント処理関数のクロージャ: React では、コンポーネント内でイベント処理関数を定義すると、関数はクロージャを形成し、コンポーネントのスコープ内のステータスとプロパティにアクセスできます。このようにして、コンポーネントの状態とプロパティをイベント処理関数で使用して対話型ロジックを実装できます; 2. useEffect や useCallback のクロージャなど。
