使用状態
次に、useState の使用方法を示す例を見てみましょう。 要件があります: iframe で外部 Web ページを読み込む必要があります。 最初のコードでは、この要件を満たすために関数コンポーネントを使用します。これには、 iframe の単純なレンダリングのみが必要です。 React をインポートし、{useState} を 'react' から取得します。 './index.less' からスタイルをインポートします。 関数Link(props) { const { 一致: { パラメータ: { リンク = '' } = {} } = {} } = プロパティ; const enCodeUrl = decodeURIComponent(リンク); const url = enCodeUrl.startsWith('http') ? enCodeUrl : `http://${enCodeUrl}`; 戻る ( <React.フラグメント> <iframe タイトル={リンク} src={url} スタイル={{ 幅: '100%', 高さ: '100%', 垂直配置: 'top' }} フレームボーダー="0" /> </React.フラグメント> ); } デフォルトリンクをエクスポートします。 新しい要件が来ました。ページに読み込み効果を追加する必要があります。実装方法は非常に簡単です。iframeの load イベントをリッスンして、読み込みの開始と終了を設定します。 この要件を満たすには、読み込みステータスを保存する必要がありますが、機能コンポーネントには独自のステータスがないため、クラス コンポーネントに変換する必要があります。 'react' から React をインポートします。 'antd' から Spin をインポートします。 './index.less' からスタイルをインポートします。 デフォルトのクラスLinkをエクスポートし、React.Componentを拡張します。 状態 = { //ストアの読み込みステータス iLoading: true, }; リンクロード() { // 更新の読み込み this.setState({ iLoading: false }); } 与える() { const { 一致: { パラメータ: { リンク = '' } = {} } = {} } = this.props; const { iLoading } = this.state; const enCodeUrl = decodeURIComponent(リンク); const url = enCodeUrl.startsWith('http') ? enCodeUrl : `http://${enCodeUrl}`; 戻る ( <React.フラグメント> <Spin spinning={iLoading} wrapperClassName={styles['iframe-loading']}> <iframe onLoad = {this.linkLoad.bind(this)} タイトル={リンク} src={url} スタイル={{ 幅: '100%', 高さ: '100%', 垂直配置: 'top' }} フレームボーダー="0" /> </スピン> </React.フラグメント> ); } } ページの読み込みを実現するためには、クラスを使用する必要があり、また、これとその他の面倒な動作をバインドする必要があります。これは単なる単純な要件ですが、フックを通じてこれらの問題を解決し、同時にコンポーネント間の状態の再利用の問題も解決できます。これを実現するために useState を使用します。 useState をインポートする React をインポートし、{useState} を 'react' から取得します。 状態を定義します // useState のパラメーターは状態の初期値であり、setInitLoading は状態値を変更するメソッドです const [initLoading, setInitLoading] = useState(true); 状態の更新 onLoad = {() => setInitLoading(false)} 完全なコードは次のとおりです。 React をインポートし、{useState} を 'react' から取得します。 'hzero-ui' から Spin をインポートします。 './index.less' からスタイルをインポートします。 関数Link(props) { const { 一致: { パラメータ: { リンク = '' } = {} } = {} } = プロパティ; 定数[initLoading、setInitLoading] = useState(true); const enCodeUrl = decodeURIComponent(リンク); const url = enCodeUrl.startsWith('http') ? enCodeUrl : `http://${enCodeUrl}`; 戻る ( <React.フラグメント> <Spin spinning={initLoading} wrapperClassName={styles['iframe-loading']}> <iframe onLoad = {() => setInitLoading(false)} タイトル={リンク} src={url} スタイル={{ 幅: '100%', 高さ: '100%', 垂直配置: 'top' }} フレームボーダー="0" /> </スピン> </React.フラグメント> ); } デフォルトリンクをエクスポートします。 使用上の注意を以下に見てみましょう useStateパラメータuseState のパラメータは、プリミティブ型またはオブジェクト型のいずれかになります。オブジェクト型を更新するときは、古い状態をマージすることを忘れないでください。そうしないと、古い状態が失われます。 const [パラメータ、setParams] = useState({ 回転: 0, 色: "#000000" }); const handleInputChange = イベント => { 定数ターゲット = イベント.ターゲット; setParams({ ...パラメータ、 [ターゲット名]: ターゲット値 }); }; 状態依存最後に更新された状態の値に基づいて現在の状態を計算する必要がある場合は、状態を更新する関数に関数が渡されます。この関数の最初のパラメーターは最後の更新の値であり、計算された結果が戻り値として返されます。 要約するuseState フックを使用すると、関数コンポーネントに状態管理機能を持たせることができます。これは従来のクラス コンポーネントの状態管理に似ていますが、より簡潔で、頻繁に使用する必要はありません。次の記事では、コンポーネント コードとフック コードがそれぞれの機能を実行できるように、他のフックを組み合わせてビジネス ロジックを抽出する方法を紹介します。 以下もご興味があるかもしれません:
|
>>: リソースアップロード機能を実現するための SpringBoot+nginx の詳細な例
目的: ステーションAをステーションBのセカンダリディレクトリとして扱うのように: http://w...
Ubuntu が今日のデスクトップ ユーザーの間で最も人気のある Linux オペレーティング シス...
目次外部キーテーブルの関係を決定する方法テーブル関係を作成する方法1対多の関係 - 従業員テーブルと...
みなさんこんにちは。私は技術の話ばかりして髪を切らない先生のトニーです。何らかの歴史的な理由や誤操作...
Nginxの仕組みNginx はコアとモジュールで構成されています。 Nginx 自体は実際にはほと...
目次序文ウェブHTTP サーバーファイルサーバー練習する序文Node.js 開発の目的は、JavaS...
123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...
1. MySQLをインストールする # docker で mysql をダウンロード docker ...
ページをデザインするときには、ログイン ウィンドウを中央に配置するなど、DIV を中央に配置し、ペー...
この記事の例では、マウス切り替え画像を実現するためのjsの具体的なコードを参考までに共有しています。...
目次序文グローバルロックテーブルロックテーブルロックメタデータ ロック (MDL ロック)要約する参...
まずは緑色の無料インストール版のMySQLをダウンロードします。任意のフォルダに入れて構いません。今...
目次1. MySQL 8.0.18のインストール2. 環境変数を設定する3. 接続テスト1. MyS...
目次Vueルーティング相対パスジャンプ1. 属性の追加2.router.resolveメソッドVue...
CSS命名規則 ヘッダー: ヘッダーコンテンツ: コンテンツ/含むフッターナビゲーション: navサ...