Props (иногда только) не определен в React Native. Ошибка типа: не удается прочитать свойство ‘x’ неопределенного

#javascript #react-native #react-native-ios

#javascript #react-native #react-native-ios

Вопрос:

Сегодня я столкнулся со странной ошибкой. Я использую компонент, вызываемый при первой загрузке в App.js , где это работает нормально. Я регистрирую props, все в порядке: объект. Затем, перейдя к следующему компоненту, LogInScreen.js используя навигацию React, там реквизит не определен. Итак, если вызывается из App.js , это работает, props — это объект, и вызывается из LogInScreen.js он выходит из строя (реквизит не определен). Если я попытаюсь его разрушить или вызвать элемент props.isNotFullScreen , он вылетает с ошибкой TypeError: Cannot read property 'isNotFullScreen' of undefined

Единственным решением, которое я нашел, было написать const isNotFullScreen = props ? props.isNotFullScreen : false; , но все же мне интересно, есть ли у кого-нибудь из вас представление о том, что происходит.

Я использую тестирование React Native 0.63.3 с помощью iOS simulator

Вызов из App.js

Вызов из LogInScreen.js

журналы показывают props правильно, тогда undefined

Ошибка симулятора

Вот мой компонент Spinner

 import React from "react";
import { View, ActivityIndicator } from "react-native";
import styles from "./styles/SpinnerStyle";
import { Colors } from "../themes";

const Spinner = (props) => {
  console.log("Spinner props:", props);
  const { isNotFullScreen } = props;
  console.log("isNotFullScreen:", isNotFullScreen);
  return (
    <View style={[styles.spinner, !isNotFullScreen amp;amp; styles.fullScreen]}>
      <ActivityIndicator
        animating={true}
        size="large"
        color={Colors.baseBlue}
        style={{
          flex: 1,
          justifyContent: "center",
        }}
      />
    </View>
  );
};

export default Spinner;
 

Комментарии:

1. Я не понял, как вы передаете свои реквизиты Spinner компоненту. Можете ли вы объяснить более подробно? Единственная опора, которую я вижу, которую вы передаете, — это isInApp .

2. Это правильно, я иногда передаю props, например ` isInApp`, который был только для целей тестирования или наиболее корректно isNotFullScreen , а иногда я этого не делаю. Однако оно не должно быть неопределенным, даже если я ничего не передаю, это должен быть пустой объект, верно?

3. Попробуйте поместить код, который вы получаете isNotFullScreen prop, в useEffect хук. Нравится useEffect(()=>{ console.log("Spinner props:", props); const { isNotFullScreen } = props; console.log("isNotFullScreen:", isNotFullScreen) }, []) . Что это заставит его работать.