Что происходит с `реквизитом: {имя: строка; описание: строка}`?

#reactjs #ecmascript-6

#reactjs #ecmascript-6

Вопрос:

Я наткнулся на этот фрагмент кода и был смущен тем, что происходит с props: { name: string; description: string } ? Как новичок, я понимаю возможность отправки props компонентам.

Однако, похоже, здесь происходит гораздо больше. Если это как-то связано с динамической генерацией, то я бы понял, что объект присваивается реквизиту через = знак. Однако, что случилось с точкой с запятой?

 export default function InfoCard(props: { name: string; description: string }) {
  return (
    <Card>
      <CardContent>
        <Typography>
          // This evaluates props.name so that the value of props.name will show
          {props.name}
        </Typography>
        <Typography>
          // This evaluates props.description so that the value of props.description will show
          {props.description}
        </Typography>
      </CardContent>
    </Card>
  );
}
  

Ответ №1:

Это недопустимый Javascript: код здесь представляет собой Typescript, надмножество Javascript.

Объект после : является аннотацией типа, что означает, что props должен быть объектом со свойством a name и a description , которые оба являются строками.

Эквивалентный Javascript такой же, без аннотаций типов:

 export default function InfoCard(props) {
  return (
    <Card>
      <CardContent>
        <Typography>
          // This evaluates props.name so that the value of props.name will show
          {props.name}
        </Typography>
        <Typography>
          // This evaluates props.description so that the value of props.description will show
          {props.description}
        </Typography>
      </CardContent>
    </Card>
  );
}
  

Вы можете проверить отправленный код на игровой площадке typescript

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

1. Аааа! Итак, это typescript … И недопустимо в javascript.

Ответ №2:

Вот как я пишу :

 export default function InfoCard({name , description}) {
  return (
    <Card>
      <CardContent>
        <Typography>
          // This evaluates props.name so that the value of props.name will show
          {name}
        </Typography>
        <Typography>
          // This evaluates props.description so that the value of props.description will show
          {description}
        </Typography>
      </CardContent>
    </Card>
  );
}
  

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

1. Мммм… Не могли бы вы сделать здесь небольшой комментарий, пожалуйста?

2. Destructuring Arguments также доступны здесь . Это означает, что вместо того, чтобы один раз получать props в качестве параметра, а затем обращаться к свойствам, вы можете написать {name , description}

3. Спасибо, что пытались помочь. Я ценю это!

4. Я также благодарен