ホームページ ウェブフロントエンド jsチュートリアル Reactにおけるpropsとstate属性の使い方の詳しい説明(コード例)

Reactにおけるpropsとstate属性の使い方の詳しい説明(コード例)

Dec 06, 2018 pm 03:45 PM
react.js フロントエンドの最適化

この記事では、React での props と state 属性の使用法について詳しく説明します (コード例)。必要な方は参考にしていただければ幸いです。あなたは助けてくれました。

この記事では React の props と state 属性の具体的な使い方を中心に紹介しますので、必要な方は参考にしてください。不備がある場合は、批判や修正を歓迎します。

props

次のような XML タグ内の属性をまだ覚えているかどうかはわかりません:

<class id="1">
 <student id="1">John Kindem</student>
 <student id="2">Alick Ice</student>
</class>
ログイン後にコピー

このような XML ファイルが表現しているのは、クラス 1 に 2 人の生徒がいるということです。生徒番号 1 の生徒は John Kindem という名前で、生徒番号 2 の生徒は Alick Ice という名前です。ID は属性です。これは読み取り専用の定数と考えることができます。
html は xml を継承しており、JSX はある意味 html と js の拡張です。属性の概念は自然に継承されています。
React では、props の概念を使用して、次のように読み取り専用の値を React コンポーネントに渡します。

// 假设我们已经自定义了一个叫Hello的组件
ReactDom.render(
  <Hello firstName={&#39;John&#39;} lastName={&#39;Kindem&#39;}/>,
  document.getElementById('root')
);
ログイン後にコピー

React コンポーネントを呼び出すとき、いくつかの定数を次のようにコンポーネントに渡すことができます。これにより、コンポーネントを内部的に呼び出すことができます。呼び出しメソッドは次のとおりです。

class Hello extends React.Component {
  constructor(props) {
    super(props);
  }
 
  render() {
    return (
      <p>
        <h1>Hello, {this.props.firstName + ' ' + this.props.lastName}</h1>
      </p>
    );//欢迎加入前端全栈开发交流圈一起学习交流:864305860
  }//面向1-3年前端人员
}//帮助突破技术瓶颈,提升思维能力
 
ReactDom.render(
  <Hello firstName={&#39;John&#39;} lastName={&#39;Kindem&#39;}/>,
  document.getElementById('root')
);
ログイン後にコピー

コンポーネント内で渡された props を取得するには、 this.props オブジェクトを使用するだけで済みますが、使用する前に、コンポーネントのコンストラクターを上書きしてそれを受け入れることを忘れないでください。 props の値は、親クラスのコンストラクターを呼び出すために使用されます。
もちろん、次のように props にデフォルト値を設定することもできます:

class Hello extends React.Component {
  constructor(props) {
    super(props);
  }
 
  static defaultProps = {
    firstName: 'John',
    lastName: 'Kindem'
  };
 
  render() {
    return (
      <div>
        <h1>Hello, {this.props.firstName + ' ' + this.props.lastName}</h1>
      </div>
    );//欢迎加入前端全栈开发交流圈一起吹水聊天学习交流:864305860
  }//面向1-3年前端人员
}//帮助突破技术瓶颈,提升思维能力
 
ReactDom.render(
  <Hello/>,
  document.getElementById('root')
);
ログイン後にコピー

ES6 クラスで静的な props のデフォルト値を宣言するだけで、実行時の効果は上記と同じです。
小道具は複雑ではないので、少し練習すれば習得できます。

状態、コンポーネントのライフサイクル

覚えているかもしれませんが、React コンポーネントに動的なエフェクトを追加したい場合はどうすればよいでしょうか?この問題は、React コンポーネントの状態を使用して解決する必要があります。React では、変更されるすべての制御変数が状態に置かれ、ページの対応するコンポーネントが再レンダリングされます。さらに、状態はコンポーネントの完全に内部にあり、状態を外部から内部に転送したり、状態の値を直接変更したりすることはできません。
最初に例を示します:

import React from 'react';
import ReactDom from 'react-dom';
 
class Time extends React.Component {
  constructor(props) {
    super(props);
 
    // 初始化state
    this.state = {
      hour: 0,
      minute: 0,
      second: 0
    }
  }
  componentDidMount() {
    this.interval = setInterval(() => this.tick(), 1000);
  }
 
  componentWillUnmount() {
    clearInterval(this.interval);
  }
 
  tick() {
    // 计算新时间
    let newSecond, newMinute, newHour;
    let carryMinute = 0, carryHour = 0;
    newSecond = this.state.second + 1;
    if (newSecond > 59) {
      carryMinute = 1;
      newSecond -= 60;
    }
    newMinute = this.state.minute + carryMinute;
    if (newMinute > 59) {
      carryHour = 1;
      newMinute -= 60;
    }
    newHour = this.state.hour + carryHour;
    if (newHour > 59) newHour -= 60;
 
    // 设置新状态
    this.setState({
      hour: newHour,
      minute: newMinute,
      second: newSecond
    });
  }
 
  render() {
    return (
      <div>
        <h1>current time: {this.state.hour + ':' + this.state.minute + ':' + this.state.second}</h1>
      </div>
    );
  }
}
ReactDom.render(
  <Time/>,
  document.getElementById('root')
);
ログイン後にコピー

これでカウンターが完成します。値は 1 秒に 1 回変化します。コードを説明しましょう: まず、次のように、コンストラクターで状態が初期化されます:

constructor(props) {
  super(props);
 
  // 在这初始化state
  this.state = {
    ...
  }
}
ログイン後にコピー

状態を変更するには、React コンポーネントの基本クラスの組み込み関数を使用します。

this.setState({
  ...
});
ログイン後にコピー

この関数を使用する前に、必ず this のスコープに注意してください。矢印関数の this は次のことを指します。通常の関数の外部 this は関数自体を指します。
さらに、ここでは 2 つの React コンポーネントのライフサイクル コールバックが使用されています: `

componentDidMount() {
  // React组件被加载到dom中的时候被调用
  ...
}
componentWillUnmount() {
  // React组件从dom中卸载的时候被调用
  ...
}
ログイン後にコピー

したがって、React コンポーネントが dom にロードされるときに、更新するタイマーを設定する場合、上記のタイマー コードは難しくありません。状態が更新されると、コンポーネントがアンロードされるときに、タイマーをクリアする必要があります。これは非常に簡単です。
ただし、React にはステートの更新頻度に上限があります。この上限を超えると、高頻度の関数で setState を使用しないように注意する必要があります。


以上がReactにおけるpropsとstate属性の使い方の詳しい説明(コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Reactの親コンポーネントで子コンポーネントのメソッドを呼び出す方法 Reactの親コンポーネントで子コンポーネントのメソッドを呼び出す方法 Dec 27, 2022 pm 07:01 PM

呼び出しメソッド: 1. クラス コンポーネントの呼び出しは、React.createRef()、ref または props のカスタム onRef 属性の関数宣言を使用して実装できます; 2. 関数コンポーネントおよびフック コンポーネントの呼び出しは、useImperativeHandle または forwardRef を使用して実装できます。子コンポーネントの ref が実装されています。

フロントエンドの最適化によってPython Webサイトのアクセス速度を向上させるにはどうすればよいですか? フロントエンドの最適化によってPython Webサイトのアクセス速度を向上させるにはどうすればよいですか? Aug 05, 2023 am 10:21 AM

フロントエンドの最適化によってPython Webサイトのアクセス速度を向上させるにはどうすればよいですか?インターネットの発展に伴い、Web サイトのアクセス速度はユーザー エクスペリエンスの重要な指標の 1 つになりました。 Pythonで開発されたWebサイトでは、フロントエンドの最適化によりアクセス速度をいかに向上させるかが解決すべき課題となります。この記事では、Python Web サイトのアクセス速度の向上に役立つフロントエンドの最適化テクニックをいくつか紹介します。静的ファイルの圧縮と結合 Web ページでは、CSS、JavaScript、画像などの静的ファイルは多くの帯域幅と負荷を占有します。

ウェブサイトの速度を向上させるための主要な最適化モードは、すべてのフロントエンド開発者がマスターする必要があります。 ウェブサイトの速度を向上させるための主要な最適化モードは、すべてのフロントエンド開発者がマスターする必要があります。 Feb 02, 2024 pm 05:36 PM

フロントエンド開発者の必需品: これらの最適化モードをマスターして、Web サイトをスムーズに作成しましょう。インターネットの急速な発展に伴い、Web サイトは企業のプロモーションとコミュニケーションのための重要なチャネルの 1 つになりました。パフォーマンスが良く、読み込みが速い Web サイトは、ユーザー エクスペリエンスを向上させるだけでなく、より多くの訪問者を惹きつけます。フロントエンド開発者として、いくつかの最適化パターンをマスターすることが不可欠です。この記事では、開発者が Web サイトをより適切に最適化できるように、一般的に使用されるフロントエンド最適化テクニックをいくつか紹介します。圧縮ファイル Web サイト開発で一般的に使用されるファイルの種類には、HTML、CSS、J などがあります。

React のカスタムフックについての深い理解 React のカスタムフックについての深い理解 Apr 20, 2023 pm 06:22 PM

React カスタム フックは、コンポーネント ロジックを再利用可能な関数にカプセル化する方法であり、クラスを作成せずに状態ロジックを再利用する方法を提供します。この記事では、カプセル化フックをカスタマイズする方法を詳しく紹介します。

React ソースコードをデバッグするにはどうすればよいですか?複数のツールを使用したデバッグ方法の紹介 React ソースコードをデバッグするにはどうすればよいですか?複数のツールを使用したデバッグ方法の紹介 Mar 31, 2023 pm 06:54 PM

React ソースコードをデバッグするにはどうすればよいですか?次の記事では、さまざまなツールで React のソース コードをデバッグする方法について説明し、コントリビューター、create-react-app、vite プロジェクトで React の実際のソース コードをデバッグする方法を紹介します。

React Mobile Adaptation Guide: さまざまな画面上のフロントエンド アプリケーションの表示効果を最適化する方法 React Mobile Adaptation Guide: さまざまな画面上のフロントエンド アプリケーションの表示効果を最適化する方法 Sep 29, 2023 pm 04:10 PM

React Mobile Adaptation Guide: さまざまな画面でフロントエンド アプリケーションの表示効果を最適化する方法 近年、モバイル インターネットの急速な発展に伴い、携帯電話を使用して Web サイトを閲覧したり、さまざまなアプリケーションを使用したりするユーザーが増えています。 。ただし、携帯電話の画面のサイズと解像度は大きく異なるため、フロントエンド開発に一定の課題が生じます。 Web サイトやアプリケーションがさまざまな画面上で適切な表示効果を発揮するには、モバイル端末に適応し、それに応じてフロントエンド コードを最適化する必要があります。レスポンシブ レイアウトの使用 レスポンシブ レイアウトは、

保守可能な WordPress メタボックスの確保: フロントエンド部分の完成 保守可能な WordPress メタボックスの確保: フロントエンド部分の完成 Aug 27, 2023 pm 11:33 PM

この一連の記事では、より保守しやすい WordPress プラグインを構築するために使用できるいくつかのヒントと戦略を確認し、タブ付きメタ ボックスを利用するプラグインのコンテキスト内ですべてを実行します。タブ専用の機能を実装し、ユーザー入力をキャプチャするために使用される最初のテキストエリアも実装しました。フォローしてくださっている方は、私たちがやったことは次のことだけであることをご存知でしょう。 タブを機能させる ユーザーが操作できる単一の UI 要素を導入する データのクリーニング、検証、保存という実際のプロセスはまだ行っていません。残りのオプション、カードの内容をわざわざ紹介しましたか。次の 2 つの記事では、まさにそれを行います。具体的には、この記事では引き続き、

React がアプリ構築の第一選択肢として Vite を使用しない理由 React がアプリ構築の第一選択肢として Vite を使用しない理由 Feb 03, 2023 pm 06:41 PM

React はなぜ Vite をアプリケーション構築の第一の選択肢として使用しないのでしょうか?次の記事では、React が Vite をデフォルトの推奨事項として推奨しない理由について説明します。

See all articles