Проходя навигацию как реквизит
В React Native, при использовании createStackNavigator
как пройти navigate
как опора?
В следующем примере
items
работает нормально, ноnavigate
являетсяundefined
когда перешел кMyList
,Это означает, что нажатие кнопки выдает ошибку:
undefined is not a function(evaluating 'navigate('ItemDetails', { itemId: item.id })')
,Как я могу пройти
navigate
вMyList
?
export class MyScreen extends React.Component {
render() {
const { items } = this.props;
const { navigate } = this.props.navigation;
console.log(navigate); // this logs [Function anonymous] :)
return (
<View>
<MyList items={items} navigate={navigate} />
</View>
);
}
}
const MyList = ( { items }, { navigate } ) => {
console.log(navigate); // this logs undefined :(
return (
<ScrollView>{
items && items.map( item =>
<View key={item.id}>
<TouchableOpacity onPress={ () =>
navigate( 'ItemDetails', { itemId: item.id } )
}>
<Text>Go</Text>
</TouchableOpacity>
</View>
)}</ScrollView>
)}
PS: если бы я переместил весь код из MyList
прямо в MyScreen
, это будет работать нормально.
1 ответ
Вы должны изменить MyList
декларация
const MyList = ( { items, navigate } ) => {...}
Как, MyList
является функциональным компонентом, любые переданные ему реквизиты будут доступны в качестве первого параметра. Я просто использую деструктуризацию объекта, чтобы получить необходимые свойства от этого объекта.
Вместо прохождения navigate
как реквизит в MyList
Вы также можете обернуть компонент, используя withNavigation
посмотрите на документ здесь. Если вы оберните его, используя withNavigation
Вы можете напрямую получить доступ к объекту навигатора из props
,
Надеюсь, это поможет!