У меня есть React BrowserRouter, в котором у меня есть три маршрута, показанных ниже:
<BrowserRouter>
<Switch>
<Route exact
path="/"
component={(routeProps: object) => (
<Component1 toggle="Previous" {...routeProps} />
)}
/>
<Route path="/active"
component={(routeProps: object) => (
<Component1 toggle="Active" {...routeProps} />
)}
/>
<Route path="/items/:id"
render={(props) => <Component2 {...props}/>}
/>
</Switch>
</BrowserRouter>
Я пытаюсь передать идентификатор в Component2, как показано, чтобы получить элемент по идентификатору с помощью getвызов API.Мой Компонент2 показан ниже:
export default class Component2 extends React.Component<Props & RouteComponentProps, State> {
public constructor(props: Props & RouteComponentProps) {
super(props);
this.state = {
item: {
//Item initialization
}
};
}
public async componentWillMount() {
let job = await ItemService.fetch(this.props.match.params);
this.setState({item: item});
};
public render() {
let {item} = this.state;
return (
<div className="item-details">
<Component3 item={item}/>
</div>
)
}
}
Однако я получаю сообщение об ошибке в строке, содержащей this.props.match.params.id
.
- Первая ошибка - если я не включаю RouteComponentProps, в
this.props.match.params
говорится: Property match does not exist on type <Readonly<Props> & Readonly<ReactNode>
- Есть еще одна публикация переполнения стека, которая привела к мысли, что вам нужны RouteComponentProps в ReactComponent для поиска реквизита, но не имеет объяснения, почему.
- Если я добавлю RouteComponentProps, я исправлю первую ошибку, но все еще не могу получить идентификатор из параметров.Я получаю ошибку:
property id does not exist on type {}
После поиска вопросов по SO и многих примеров реакции маршрутизации я застрял.Моя конечная цель состоит в том, чтобы иметь компонент (Component2), который будет:
- быть перенаправлен в тот момент, когда URL соответствует
items/:id
(то есть /items/3
) - Передать идентификатор 3в этот Компонент и вызовите Бэкэнд для получения элемента
- Сохраните элемент из внутреннего вызова в состояние (локальное состояние Компонента2)
- Передайте этот элемент из состояния в дочерние компоненты
Мне также любопытно, в чем разница:
React.Component
React.Component<Props>
React.Component<Props, State>
React.Component<Props & RouteComponentProps, State>
, поскольку моя ссылка на компонент в <Route
приводит к ошибкам, когда я переключаю объявление компонента с помощью React.Components выше.