Если вы новичок в React Native или React, вы встречали слова state и props. Понимание этих двух факторов необходимо для разработки динамичных и адаптируемых мобильных приложений. В этой статье блога мы углубимся в состояние и реквизиты, рассмотрим их различия и узнаем, как эффективно обрабатывать поток данных в вашем приложении React Native.
Состояние — это встроенный объект, который позволяет компонентам создавать собственные данные и управлять ими. Он содержит информацию, которая может измениться в течение жизненного цикла компонента. Всякий раз, когда состояние изменяется, компонент перерисовывается, чтобы отразить эти изменения.
Props, сокращение от свойств, являются компонентами, доступными только для чтения. Это внешние параметры, передаваемые в компонент, аналогично тому, как аргументы передаются в функцию.
Особенность | Состояние | Реквизит |
---|---|---|
Изменчивость | Изменчивый (может меняться со временем) | Неизменяемый (только для чтения) |
Объем | Локально для компонента | Передается из родительского компонента в дочерний |
Цель | Управляет данными, которые меняются со временем | Настраивает компоненты с использованием внешних данных |
Обновления | Запускает повторный рендеринг при обновлении | Не запускает повторный рендеринг при изменении родительского элемента |
Понимание того, когда использовать состояние, а когда реквизиты, является ключом к управлению потоком данных в вашем приложении.
Эффективное управление потоками данных гарантирует, что ваше приложение будет работать предсказуемо, а также его будет легче отлаживать и поддерживать.
React Native использует однонаправленный поток данных. Данные перемещаются от родительского компонента к дочернему через реквизиты. Это упрощает понимание и отладку потока данных.
Когда нескольким компонентам требуется доступ к одному и тому же фрагменту данных, лучше всего поднять состояние до ближайшего общего предка. Таким образом, общее состояние может быть передано через реквизит.
Чтобы разрешить дочерним компонентам взаимодействовать с родительскими компонентами, вы можете передавать функции (обратные вызовы) в качестве реквизитов. Дочерний компонент может затем вызвать эту функцию для отправки данных обратно родительскому компоненту.
Давайте рассмотрим несколько примеров кода, иллюстрирующих эти концепции.
Родительский компонент (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;
Объяснение:
Компоненты без сохранения состояния легче тестировать и отлаживать. Используйте реквизит для передачи им данных.
Используйте состояние только при необходимости. Слишком большое количество компонентов с сохранением состояния может затруднить управление вашим приложением.
Никогда не изменяйте состояние напрямую. Всегда используйте setState или функцию обновления из useState.
Используйте PropTypes для документирования предполагаемых типов свойств, передаваемых компонентам.
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 });
Дочерние компоненты не должны пытаться напрямую изменять свойства или родительское состояние. Используйте обратные вызовы.
Понимание и эффективное управление состоянием и реквизитами имеет важное значение для любого разработчика React Native. Освоив эти концепции, вы сможете создавать приложения, которые не только функциональны, но и понятны, эффективны и удобны в обслуживании.
Помнить:
Потратьте время на применение этих концепций в своих проектах, и вы увидите значительное улучшение рабочего процесса разработки.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3