Думаю, проблема связана с функцией handleClick
.
Каждый раз, когда вызывается этот метод, вы sh добавляете новую запись в стек истории. Которые анализируют ваши определенные маршруты и отображают связанный компонент. В вашем случае это тот же компонент, но я не уверен, способен ли маршрутизатор определить его, поэтому я бы ожидал повторного рендеринга.
Возможно, решением было бы включить другое состояние, которое является отвечает за информирование компонента о текущем объекте, отображаемом на экране. Таким образом, key
будет отвечать только за параметр маршрута, и это новое состояние будет отвечать за внутреннюю навигацию.
function MyComponent(props) {
let { key } = useParams();
const [myObject, setMyObject] = React.useState(null)
const [displayedObj, setDisplayedObj] = React.useState('');
useEffect(() => {
axios.get('/myendpoint/' + key).then( response => {
let myObject = response.data
setMyObject(myObject)
setDisplayedObj(key)
})
}, [key, displayedObj]) // we listen for displayedObj too
, а затем в handleClick
мы обновим это новое состояние. Это вызовет useEffect
и, следовательно, обновит состояние myObject
до нового значения:
const handleClick = (key) => {
setDisplayedObj(key);
// This will trigger the useEffect and refresh
// the data displayed without reloading the page
};