reactjs - Matchande URL-parametrar i Ionic med React
Jag utvecklar en FunctionalComponent som kommer att rendera en lista med objekt, i Ionic med React. Komponenten kommer att återanvändas för varje typ av objekts status. Jag skickar objektets status som en url-param.
Jag vill hämta url-param och visa det som listtitel och använda det för att anropa API:et för de matchade objekten. Vid renderingen av List-Component visas match för url-param som undefined.
Hur kan jag få URL-parametern i Component?
Länk till List-Page på Dashboard.tsx:
<IonCard className="card-body" href="/list/onschedule">
App.tsx:
<IonRouterOutlet>
<Route exact path="/login" component={Login} />
<Route exact path="/" render={() => <Redirect to="/dashboard" />} />
<PrivateRoute path="/dashboard" component={Dashboard} exact={true} />
<PrivateRoute path="/list/:status" component={List} />
</IonRouterOutlet>
I PrivateRoute-komponenten placerade jag en console.log för props och det får parametern:
List.tsx:
interface StatusMatchProps extends RouteComponentProps<{
status: string;
}> {}
const List: React.FunctionComponent<StatusMatchProps> = ({match}) => {
console.log("match: " + match)
return (
<>
<IonTitle>{match.params.status}</IonTitle>
);
};
Chromes konsolutdata:
Svar #1
Problemet var i PrivateRoute-komponenten som inte skickade vidare props. Detta är den fungerande versionen av komponenten:
interface PrivateRouteProps extends RouteProps {
component: any
}
export const PrivateRoute: FunctionComponent<PrivateRouteProps> = ({ component: Component, ...rest }) => (
<Route {...rest} render={props => {
const currentUser: string | null = localStorage.getItem("userID");
if (!userID) {
// not logged in so redirect to login page with the return url
return <Redirect to={{ pathname: '/login', state: { from: props.location } }} />
}
// authorised so return component
return <Component {...props} />
}} />
);

