Почему мне нужно использовать фигурные скобки для параметра route?

#javascript

#javascript

Вопрос:

Я использую react navigation v5 и переношу параметр с одного экрана на другой. Я заставил это работать, но я не могу понять, зачем мне нужно использовать фигурные скобки там. И куда мне добавить параметр props?

 1 screen
<TouchableOpacity onPress={() => { nav.navigate('userProfile', { userId: 1 }) }} >

2 screen
const userProfile = ({ route }) => {
    const { id } = route.params;
    return (
        <View>
            <Text>{id}</Text>
        </View>
    )
}

 

Как я уже сказал, это работает так, но обычно у меня есть что-то вроде

 const userProfile = (props) => 
 

Как бы я добавил реквизиты на экран 2? И зачем мне нужно использовать фигурные скобки и как мне узнать, могу ли я добавить его в качестве параметра, например, props, или мне нужно использовать скобки.

Спасибо!

Обновление: я узнал, что он также работает с props.route.params.id . Сейчас я очень смущен.

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

1. ({ route }) => { ... просто разрушает свойство route из props . Это не вопрос react, это вопрос о деструктурировании объектов JS

Ответ №1:

В javascript это называется деструктурированием

здесь вы извлекаете route из userProfile props

 const userProfile = ({ route }) => {
 

что эквивалентно

 const userProfile = (props) => {
  const route = props.route;
};
 

==

 const userProfile = (props) => {
  const { route } = props;
};
 

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

1. Технически это не эквивалентно использованию const route = ... . При деструктурировании параметра он не будет объявлен как const по умолчанию

2. Ах, так это объясняет, почему props.route.params.id , также работает. Почему я должен использовать это вместо просто реквизита? Большое спасибо!

3. @Sylber Да, это просто сокращенный синтаксис для извлечения определенных свойств из объекта в именованные локальные переменные. Причина, по которой вы это делаете, заключается в удобстве, больше всего на свете. Ни один из способов не является «более правильным»

4. @Sylber личные предпочтения … просто чтобы сохранить строку кода…

5. Привет, @mhodges Я просто пытаюсь прояснить идею здесь..