Я пытаюсь загрузить подробное представление на основе маршрутаact-router-dom, который должен получить параметр URL (id) и использовать его для дальнейшего заполнения компонента.
Мой маршрут выглядит так, /task/:id
и мой компонент загружается нормально, пока я не попытаюсь извлечь: id из URL следующим образом:
import React from "react";
import { useParams } from "react-router-dom";
class TaskDetail extends React.Component {
componentDidMount() {
let { id } = useParams();
this.fetchData(id);
}
fetchData = id => {
// ...
};
render() {
return <div>Yo</div>;
}
}
export default TaskDetail;
Это вызывает следующую ошибку, и я не уверен, где правильно реализовать useParams ().
Error: Invalid hook call. Hooks can only be called inside of the body of a function component.
Документы показывают только примеры, основанные на функциональных компонентах, а не на классах.
Спасибо за вашу помощь, я новичок, чтобы реагировать.
reactjs
react-router
Jorre
источник
источник
useParams
? Может превратить это вHOC
?Ответы:
Вы можете использовать
withRouter
для этого. Просто оберните экспортированный классифицированный компонент внутри,withRouter
и тогда вы сможете использоватьthis.props.match.params.id
параметры вместо использованияuseParams()
. Вы также можете получить любуюlocation
,match
илиhistory
информацию с помощьюwithRouter
. Они все переданы подthis.props
На вашем примере это будет выглядеть так:
Просто как тот!
источник
Параметры передаются через реквизиты объекта сопоставления.
источник: https://redux.js.org/advanced/usage-with-react-router
Вот пример из документов, разрушающих подпорки в аргументах.
источник
Так как хуки не работают с компонентами на основе классов, вы можете заключить их в функцию и передать свойства:
Но, как сказал @ michael-mayo, я ожидаю, что это то, что
withRouter
уже работает.источник
Вы не можете вызвать ловушку, такую как "useParams ()" из React.Component.
Самый простой способ, если вы хотите использовать хуки и иметь существующий реагирующий компонент, это создать функцию, затем вызвать из этой функции React.Component и передать параметр.
Ваш маршрут переключения будет по-прежнему
тогда вы сможете получить идентификатор из реквизита в вашем компоненте реакции
источник
Попробуйте что-то вроде этого
источник
С реагировать на маршрутизатор 5.1 вы можете получить идентификатор со следующими:
и ваш компонент, чем может получить доступ к идентификатору:
источник