この記事では、react でよくある質問の分析を主に紹介します。ここをクリックして、質問の 1 つがあなたの疑問を解決するのに役立つかどうかを確認してください。今すぐこの記事を一緒に読んでみましょう
1. Reactの要素とコンポーネントの違いは何ですか?
公式 Web サイトのドキュメントでは、Element について次のように説明されています:
Elements are the smallest building blocks of React apps. An element describes what you want to see on the screen:
公式 Web サイトでは、Compent について次のように説明されています:
Components let you split the UI into independent, reusable pieces, and think about each piece in isolation. Conceptually, components are like JavaScript functions. They accept arbitrary inputs (called "props") and return React elements describing what should appear on the screen.
つまり、React Element は、画面に表示されるコンテンツを記述するデータ構造であり、UI のオブジェクト表現です。 。典型的な React Element は、JSX を使用して構築され、createElement 呼び出しの組み合わせに変換された宣言的なコード部分です。 React コンポーネントは、パラメーター入力を受け取り、React 要素を返すことができる関数またはクラスです。
2、JSX
React は、JSX を使用して通常の JavaScript を置き換えます。 JSX は、XML によく似た JavaScript 構文拡張機能です。必ずしも JSX を使用する必要はありませんが、次のような利点があります:
JSX 执行更快,因为它在编译为 JavaScript 代码后进行了优化。 它是类型安全的,在编译过程中就能发现错误。 使用 JSX 编写模板更加简单快速。
3. setState を呼び出した後はどうなりますか?
コード内で setState 関数を呼び出した後、React は渡されたパラメーター オブジェクトをコンポーネントの現在の状態とマージし、いわゆる調整プロセス (Reconciliation) をトリガーします。調整プロセスの後、React は比較的効率的な方法で新しい状態に基づいて React 要素ツリーを構築し、UI インターフェイス全体の再レンダリングを開始します。 React が要素ツリーを取得した後、React は新しいツリーと古いツリーの間のノードの差を自動的に計算し、その差に基づいてインターフェイスを最小化し、再レンダリングします。差分計算アルゴリズムでは、React はどの位置が変更され、どのように変更されるべきかを比較的正確に知ることができるため、完全な再レンダリングではなくオンデマンドの更新が保証されます。
4. どのような状況で機能コンポーネントの代わりにクラスコンポーネントを使用したいですか?
コンポーネントに内部状態を含める必要がある場合、またはライフサイクル関数を使用する必要がある場合はクラス コンポーネントを使用し、それ以外の場合は機能コンポーネントを使用します。
5. ライフサイクルのどの段階で AJAX リクエストを開始する必要がありますか?
次の主な理由から、AJAX リクエストをcomponentDidMount 関数に入れる必要があります:
React の次世代調整アルゴリズム Fiber はレンダリングを開始または停止することでアプリケーションのパフォーマンスを最適化し、これは、componentWillMount のトリガーの数に影響します。 ComponentWillMount ライフサイクル関数の呼び出し回数は不確実になり、React は、componentWillMount を複数回、頻繁に呼び出す可能性があります。 AJAX リクエストをcomponentWillMount 関数に入れると、明らかに複数回トリガーされることになりますが、これは当然良い選択ではありません。
AJAX リクエストをライフサイクルの他の関数に配置した場合、リクエストがコンポーネントのマウント後にのみ応答を必要とするという保証はできません。コンポーネントがマウントされる前にデータ要求が完了し、コンポーネントの状態にデータを追加するために setState 関数が呼び出された場合、アンマウントされたコンポーネントについてエラーが報告されます。この問題は、componentDidMount 関数で AJAX リクエストを行うことで効果的に回避できます。 (さらに詳しく知りたい場合は、PHP 中国語 Web サイトReact Reference Manual のコラムにアクセスして学習してください)
6. 制御コンポーネントと非制御コンポーネントの違いは何ですか?
React のコアコンポーネントの 1 つは、内部状態を維持できる自律コンポーネントですが、ネイティブ HTML フォーム要素 (input、select、textarea など) を導入する場合、すべてのデータを React コンポーネントでホストする必要がありますか? DOM要素内に保持しますか?この質問に対する答えは、制御されたコンポーネントと制御されていないコンポーネントを定義上分離することです。制御コンポーネントとは、React によって制御され、すべてのフォーム データが均一に保存されるコンポーネントを指します。つまり、React.js の <input> 、<textarea></textarea>、<select></select>
などの要素の値が React.js によって制御されている場合、それは制御コンポーネントです。たとえば、次のコードでは、ユーザー名変数値は DOM 要素には格納されませんが、コンポーネント ステータス データに格納されます。ユーザー名変数の値を変更する必要がある場合は、setState 関数を呼び出して値を変更する必要があります。
class ControlledForm extends Component { state = { username: '' } updateUsername = (e) => { this.setState({ username: e.target.value, }) } handleSubmit = () => {} render () { return ( <form onSubmit={this.handleSubmit}> <input type='text' value={this.state.username} onChange={this.updateUsername} /> <button type='submit'>Submit</button> </form> ) } }
Uncontrolled Component は、React コンポーネントではなく DOM にフォーム データを保存します。 refs を使用して DOM 要素を操作できます:
class UnControlledForm extends Component { handleSubmit = () => { console.log("Input Value: ", this.input.value) } render () { return ( <form onSubmit={this.handleSubmit}> <input type='text' ref={(input) => this.input = input} /> <button type='submit'>Submit</button> </form> ) } }
制御されていないコンポーネントは、追加のコードを追加せずに DOM から直接データを取得できるようです。ただし、実際の開発では制御されていないコンポーネントの使用は推奨しません。実際の状況では、フォームの検証、ボタンのクリックの選択的なオン/オフ、入力形式の強制など、より機能的なサポートを考慮する必要があるためです。データを React にホストすると、これらの関数を宣言的な方法でより適切に完了できるようになります。 React やその他の MVVM フレームワークを導入する本来の理由は、DOM の大量の直接操作から解放されることです。
7. shouldComponentUpdate の機能とは何ですか?なぜそれほど重要ですか?
shouldComponentUpdate 允许我们手动地判断是否要进行组件更新,根据组件的应用场景设置函数的合理返回值能够帮我们避免不必要的更新。
8、概述下 React 中的事件处理逻辑
为了解决跨浏览器兼容性问题,React 会将浏览器原生事件(Browser Native Event)封装为合成事件(SyntheticEvent)传入设置的事件处理器中。这里的合成事件提供了与原生事件相同的接口,不过它们屏蔽了底层浏览器的细节差异,保证了行为的一致性。另外有意思的是,React 并没有直接将事件附着到子元素上,而是以单一事件监听器的方式将所有的事件发送到顶层进行处理。这样 React 在更新 DOM 的时候就不需要考虑如何去处理附着在 DOM 上的事件监听器,最终达到优化性能的目的。
9、传入 setState 函数的第二个参数的作用是什么?
该函数会在setState函数调用完成并且组件开始重渲染的时候被调用,我们可以用该函数来监听渲染是否完成:
this.setState( { username: 'tylermcginnis33' }, () => console.log('setState has finished and the component has re-rendered.') )
10、组件的生命周期
组件的生命周期分成三个状态:
Mounting:已插入真实 DOM Updating:正在被重新渲染 Unmounting:已移出真实 DOM
React 为每个状态都提供了两种处理函数,will 函数在进入状态之前调用,did 函数在进入状态之后调用,三种状态共计五种处理函数。
componentWillMount()componentDidMount()componentWillUpdate(object nextProps, object nextState)componentDidUpdate(object prevProps, object prevState)componentWillUnmount()
此外,React 还提供两种特殊状态的处理函数。
componentWillReceiveProps(object nextProps):已加载组件收到新的参数时调用shouldComponentUpdate(object nextProps, object nextState):组件判断是否重新渲染时调用
本篇文章到这就结束了(想看更多就到PHP中文网React使用手册栏目中学习),有问题的可以在下方留言提问。
以上が反応面接ではどのような質問が行われますか?反応面接でよくある質問に対する詳細な分析と回答の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

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

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、
