Как мне создать React-компонент высокого порядка, подключенный к Redux с использованием Typescript?

Вы упустили свой worker.terminate();, который, вероятно, вам нужен в вашем обработчике onmessage. Как и сейчас, рабочий порождается, но убивается почти сразу после.

2
задан JoaoTMDias 18 January 2019 в 20:32
поделиться

1 ответ

withRouter() имеет эффект обеспечения реквизита для компонента, который он оборачивает. Поэтому, чтобы использовать его, компонент, который вы хотите обернуть, должен ожидать этих реквизитов. В этом случае Authenticated ожидает только IAuthenticatedProps, но withRouter() предоставляет гораздо больше. Поэтому TypeScript жалуется, потому что withRouter() пытается предоставить реквизит Authenticated, который Authenticated не говорит, что он ожидает.

Опоры, которые предоставляет withRouter(), определены в интерфейсе RouteComponentProps. Попробуйте добавить это к вашему типу пропасти для Authenticated:

  class Authenticated extends React.Component<
    IAuthenticatedProps & RouteComponentProps<{}>,
    IAuthenticatedState
  > {
    // ...
  }

Вы также можете удалить location из вашего интерфейса IAuthenticatedProps, так как он также включен в интерфейс RouteComponentProps.

Еще одна проблема состоит в том, что опора render в Route ожидает функцию, а не какой-либо старый тип компонента React. Поскольку isAuthenticated() возвращает React.ComponentClass, вам нужно сделать что-то вроде следующего:

const Authenticated = isAuthenticated(LandingPage);
// ...
<Route
  exact
  path={INDEX_URL}
  render={(props: any) => <Authenticated {...props} />}
/>
0
ответ дан ethan.roday 18 January 2019 в 20:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: