React Native や React を初めて使用する場合は、state と props という言葉に出会ったことがあるでしょう。これら 2 つを理解することは、動的で適応性のあるモバイル アプリケーションを開発するために不可欠です。このブログ記事では、state と props について詳しく説明し、それらの違いを調べ、React Native アプリケーションでデータ フローを効果的に処理する方法を学びます。
State は、コンポーネントが独自のデータを作成および管理できるようにする組み込みオブジェクトです。コンポーネントのライフサイクルを通じて変更される可能性のある情報が保持されます。状態が変化するたびに、コンポーネントはそれらの変化を反映するために再レンダリングされます。
Props (プロパティの略) は読み取り専用コンポーネントです。これらは、引数が関数に渡される方法と同様に、コンポーネントに渡される外部パラメータです。
特徴 | 州 | 小道具 |
---|---|---|
可変性 | 可変 (時間の経過とともに変化する可能性があります) | 不変 (読み取り専用) |
範囲 | コンポーネントに対してローカル | 親コンポーネントから子コンポーネントに渡されます |
目的 | 時間の経過とともに変化するデータを管理します | 外部データを使用してコンポーネントを構成します |
アップデート | 更新時に再レンダリングをトリガーします | 親で変更されたときに再レンダリングをトリガーしません |
いつ状態を使用し、いつプロパティを使用するかを理解することが、アプリ内のデータ フローを管理する鍵となります。
効果的なデータ フロー管理により、アプリが予測どおりに動作し、デバッグと保守が容易になります。
React Native は単方向のデータ フローを使用します。データは props を介して親コンポーネントから子コンポーネントに移動します。これにより、データ フローの理解とデバッグが容易になります。
複数のコンポーネントが同じデータにアクセスする必要がある場合は、状態を最も近い共通の祖先まで引き上げるのが最善です。このようにして、共有状態を props.
経由で渡すことができます。子コンポーネントが親コンポーネントと通信できるようにするには、関数 (コールバック) を props として渡すことができます。子コンポーネントはこの関数を呼び出して、親にデータを送り返すことができます。
これらの概念を説明するために、いくつかのコード例を見てみましょう。
親コンポーネント (App.js):
import React from 'react'; import { View } from 'react-native'; import Greeting from './Greeting'; const App = () => { return (); }; export default App;
子コンポーネント (Greeting.js):
import React from 'react'; import { Text } from 'react-native'; const Greeting = (props) => { returnHello {props.name} ; }; export default Greeting;
説明:
カウンターコンポーネント (Counter.js):
import React, { useState } from 'react'; import { View, Button, Text } from 'react-native'; const Counter = () => { const [count, setCount] = useState(0); return (); }; export default Counter; You clicked {count} times
説明:
親コンポーネント (TemperatureConverter.js):
import React, { useState } from 'react'; import { View } from 'react-native'; import TemperatureInput from './TemperatureInput'; const toCelsius = (fahrenheit) => ((fahrenheit - 32) * 5) / 9; const toFahrenheit = (celsius) => (celsius * 9) / 5 32; const TemperatureConverter = () => { const [temperature, setTemperature] = useState(''); const [scale, setScale] = useState('c'); const handleCelsiusChange = (temp) => { setScale('c'); setTemperature(temp); }; const handleFahrenheitChange = (temp) => { setScale('f'); setTemperature(temp); }; const celsius = scale === 'f' ? toCelsius(parseFloat(temperature)) : temperature; const fahrenheit = scale === 'c' ? toFahrenheit(parseFloat(temperature)) : temperature; return (); }; export default TemperatureConverter;
子コンポーネント (TemperatureInput.js):
import React from 'react'; import { TextInput, Text } from 'react-native'; const scaleNames = { c: 'Celsius', f: 'Fahrenheit', }; const TemperatureInput = ({ scale, temperature, onTemperatureChange }) => { return (Enter temperature in {scaleNames[scale]}: > ); }; export default TemperatureInput;
説明:
ステートレス コンポーネントはテストとデバッグが簡単です。 props を使用してデータを渡します。
必要な場合にのみ状態を使用します。ステートフル コンポーネントが多すぎると、アプリの管理が難しくなる可能性があります。
状態を直接変更しないでください。常に setState または useState.
のアップデーター関数を使用してください。PropType を使用して、コンポーネントに渡されるプロパティの意図したタイプを文書化します。
import PropTypes from 'prop-types'; Greeting.propTypes = { name: PropTypes.string.isRequired, };
さまざまなネスト レベルの多くのコンポーネントからアクセスできる必要があるデータの場合は、Context API の使用を検討してください。
// Incorrect this.state.count = this.state.count 1; // Correct this.setState({ count: this.state.count 1 });
子コンポーネントは、props や親の状態を直接変更しようとしてはなりません。コールバックを使用します。
状態とプロパティを理解し、効果的に管理することは、React Native 開発者にとって不可欠です。これらの概念をマスターすると、機能的であるだけでなく、クリーンで効率的で保守しやすいアプリケーションを構築できるようになります。
覚えて:
時間をかけてプロジェクトでこれらの概念を実践すると、開発ワークフローが大幅に改善されることがわかります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3