Как набирать с помощью flowjs компонент Match из роутера - PullRequest
1 голос
/ 26 апреля 2019

Определение типа:

declare export class Match<Params> extends React$Component<{|
  path: string,
  children: (props: {|
    match: null | ({ uri: string, path: string } & Params),
    location: typeof location,
    navigate: NavigateFn,
  |}) => React$Node,
|}> {}

, используя Match как здесь:

<Match path="/agents/:id">
   {({ match, navigate }) => ( [...] )
</Match>

здесь match считается null потоком

, еслиЯ пытаюсь что-то вроде

class MatchAgent extends Match<{id: string}> {}

Поток работает отлично, но реактивные сбои не могут вызвать Класс как функцию.

const MatchAgent: Match<{id:string}> = Match;

это работает с реакцией, но не с потоком: '(

Кто-нибудь знает, как мы можем напечатать это с помощью flowjs? Спасибо

РЕДАКТИРОВАТЬ: Вот мой обходной путь

  const MatchAgent = new Match<{ id: string }>({
    path: '/agents/:id',
    children: ({ match, navigate }) => ([...]),
  });

1 Ответ

0 голосов
/ 16 мая 2019

Если я правильно понимаю, вы хотите, чтобы match был не null. К сожалению, согласно определению типа Flow, match может быть null или объектом формы { uri: string, path: string } & Params. Чтобы Flow прекратил жаловаться на то, что match является null, вам нужно уточнить match, проверив, является ли оно null. Например,

import React from 'react';

declare export class Match<Params> extends React$Component<{|
  path: string,
  children: (props: {|
    match: null | ({ uri: string, path: string } & Params),
    location: any, // since location isn't defined in Try Flow
    navigate: any, // since NavigateFn isn't defined in Try Flow
  |}) => React$Node,
|}> {}

function App() {
  return (
    <Match path="/agents/:id">
      {({ match, navigate }) => {
        if (match === null) {
          return null; // or whatever you want when it doesn't match
        }

        return match.id;
      }}
    </Match>
  );
}

Try Flow

В качестве альтернативы, если у вас есть контроль над определением (и реализацией) типа потока для Match, вы можете удалить null из типа объединения match: { uri: string, path: string } & Params.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...