Полученные реквизиты в родной навигации не определены - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь получить доступ к реквизитам, переданным в собственный компонент реакции, но кажется, что реквизиты не получены компонентом. Компонент, который передает реквизиты (PastHires.js):

return (
  <ScrollView style={styles.container}>
    <Text style={styles.heading}>Past Hires</Text>
      {
        this.state.boards.filter(item => item.driverId === this.props.user.id && item.hireStatus === 'completed' ).map((item, i) => (
          <ListItem
            style={styles.listItem}
            key={i}
            title={item.pickupDatetime + '  ' + item.hireType.toUpperCase() + '  ' + item.pickupLocation.toUpperCase()}
            leftIcon={{name: 'book', type: 'font-awesome'}}
            onPress={() => {
              this.props.navigation.navigate('PastHireDetails', {
                hireId: 12,
              });
            }}
          />
        ))
      }
  </ScrollView>
);

}

Компонент, который получает реквизиты (PastHireDetails.js):

componentDidMount() {
const { navigation } = this.props;
// console.log(navigation.state)
const ref = Firebase.firestore().collection('hires').doc(JSON.parse(navigation.getParam('hireId')));
ref.get().then((doc) => {
  if (doc.exists) {
    this.setState({
      hire: doc.data(),
      key: doc.id,
      isLoading: false
    });
  } else {
    console.log("No such document!");
  }
});

}

Это выдает синтаксическую ошибку: Ошибка синтаксического анализа JSON: неожиданный идентификатор "undefined" Когда я консоль журнала навигация. Состояние возвращает, что параметры не определены

Object {
  "key": "PastHireDetails",
  "params": undefined,
  "routeName": "PastHireDetails",
}

Есть ли что-то, что я делаю неправильноВот? Какие-нибудь исправления?

Ответы [ 2 ]

0 голосов
/ 21 октября 2019
this.props.navigation.navigate('PastHireDetails', {
                hireId: 12,
              })

В приведенной выше строке вы установили параметр навигации, называемый hireId, который является целым числом

const { navigation } = this.props

navigation.getParam('hireId')

navigation.getParam ('hireId') вернет вам целочисленное значение

Но в другом скрипте вы конвертируете это целое число в JSON с помощью JSON.parse(navigation.getParam('hireId'))

, это приведет к ошибке

Попробуйте удалить JSON.parse, поскольку это уже целое число, которое вы хотите

0 голосов
/ 19 октября 2019

Если вы использовали реагирующую навигацию, попробуйте это для доступа к параметрам навигации

 componentDidMount() {
    const { navigation } = this.props;
    // console.log(navigation.state);
    const hireId = navigation.state.params.hireId;
    const ref = Firebase.firestore().collection('hires').doc(hireId);
    ref.get().then((doc) => {
      if (doc.exists) {
        this.setState({
          hire: doc.data(),
          key: doc.id,
          isLoading: false
        });
      } else {
        console.log("No such document!");
      }
    }); 
 }

и обратитесь к этой аналогичной проблеме https://stackoverflow.com/questions/58279318/navigation-getparam-in-not-an-object/58280498#58280498

...