React router с Typescript (функциональный класс)

Я пробую Typescript с реакцией (раньше никогда не работал). Я решил проблему, но я не уверен, что это правильный способ сделать это.

Итак, мой маршрут в реакции выглядит так

<Route exact path='/show/:id' component = {ShowIssues} />

И мой решенный компонент выглядит так

import React from "react";
import { RouteProps } from "react-router-dom";

interface RouteInfo extends RouteProps {
  params: {
    id: string;
  };
}

const ShowIssues = ({ match }: { match: RouteInfo }) => {
  const { params }: { params: { id: string } } = match;
  const { id }: { id: string } = params;

  return <div>time to show the issue {id}</div>;
};

export default ShowIssues;

Правильно ли решен в реквизите этот матч? Удивительно, но я почти ничего не нашел о функциональных компонентах (и грядут хуки, так что, думаю, имеет смысл поднять это сомнение).

Другое мое сомнение касается const { params }: { params: { id: string } } = match;, есть ли способ повторно использовать RouteInfo, чтобы мне не приходилось вводить его дважды?

Спасибо!

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
3 347
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Типы const { params }: { params: { id: string } } и const { id }: { id: string } избыточны, потому что они будут выведены, если match был введен правильно.

Реквизиты маршрута — это объект определенного типа со свойством match, RouteComponentProps. Он принимает тип match.params в качестве общего параметра.

Должен быть:

interface RouteInfo extends RouteProps {
    id: string;
}

const ShowIssues = ({ match }: RouteComponentProps<RouteInfo>) => {
  const { params } = match;
  const { id } = params;

  return <div>time to show the issue {id}</div>;
};

Идеально, это именно то, что я искал. Я тоже не видел его должным образом, чтобы печатать его каждый раз.

Ruffeng 09.02.2019 17:54

Рад, что это помогло.

Estus Flask 09.02.2019 17:58

Просто чтобы еще раз проверить и убедиться, что все в порядке: RouteComponentProps уже указывает на params, поэтому мне просто нужно указать id: string в моем типе? с оберткой params не получалось и без нее выглядит хорошо

Ruffeng 09.02.2019 18:30

Это правильно. См. github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types‌​/…, как это работает. Я обновил ответ для ясности.

Estus Flask 09.02.2019 18:45

Разве свойства RouteProps не для <Route />? Расширение их здесь кажется излишним и на самом деле вызвало у меня странные ошибки TS. Это работает достаточно хорошо: interface RouteInfo { ... .

Láďa Durchánek 15.05.2020 10:49

Другие вопросы по теме