React Router: перенаправление URL с указанным параметром c - PullRequest
0 голосов
/ 06 февраля 2020

Я обновляю сайт хранилища данных, где наборы данных сопоставляются с идентификатором, который является параметром, используемым в наших URL-путях. Несколько наборов данных были недавно повреждены, и часть решения включала изменение их идентификаторов. Проблема в том, что многие пользователи связаны с наборами данных на нашем сайте - некоторые из них уже устарели после того, как эти вышеупомянутые идентификаторы изменились.

На данный момент я просто делаю быстрое перенаправление на стороне клиента на 5 или около того идентификаторов, которые мертвы. Я просто хочу перенаправить пользователя с /datasets/oldID на /datasets/newID, но я не могу найти в документах ничего о буквальном перенаправлении на другой URL. Да, это жестко.

Если www.example.com/rootpath/dataset/001 мертв и сейчас www.example.com/rootpath/dataset/002, как я могу перенаправить пользователя ОТ www.example.com/rootpath/dataset/001 и ДО www.example.com/rootpath/dataset/002?

Вот настройка маршрутов набора данных

const DatasetRoutes = ({ dataset }) => (
  <Switch>
    <Route
      name="dataset"
      exact
      path="/datasets/:datasetId"
      render={() => <DatasetContent dataset={dataset} />}
    />
    <Route
      name="download"
      exact
      path="/datasets/:datasetId/download"
      component={DownloadDataset}
    />
    <Route
      name="publish"
      exact
      path="/datasets/:datasetId/publish"
      component={() => (
        <Publish datasetId={dataset.id} metadata={dataset.metadata} />
      )}
    />
/*    ... 
 more routes etc
*/    ...
  </Switch>
)

Я немного озадачен тем, что не могу понять, как сделать что-то настолько простое с React Router v4. Я пробовал несколько вещей ... есть ли прямое решение для этого?

1 Ответ

1 голос
/ 06 февраля 2020

Вы можете обработать перенаправление в DatasetContent компоненте:

  1. Установить словарь, отображающий старые идентификаторы, которые требуют перенаправления на новые идентификаторы.
  2. Использовать useParams hook (или как бы вы не обращались к параметрам) и в компоненте DatasetContent:

    const map = {
        oldId: "newId"
    };
    
    let { datatsetId } = useParams();
    
    if (map.hasOwnProperty(datasetId) {
        return (<Redirect to={`/datasets/${map[datasetId]}`});
    }
    
    // the rest of your original DatasetContent rendering code.
    ...
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...