React Js 17-Ошибка типа: Объект не является функцией при выполнении useParams();

#node.js #react-router #react-hooks

Вопрос:

Я начинающий в React js.Я получил ошибку Ниже при использовании useParams(); Ниже приведена ошибка;

 Uncaught TypeError: Object is not a function
    at MatchPage (MatchPage.js:8)
    at renderWithHooks (react-dom.development.js:14985)
    at mountIndeterminateComponent (react-dom.development.js:17811)
    at beginWork (react-dom.development.js:19049)
    at HTMLUnknownElement.callCallback (react-dom.development.js:3945)
    at Object.invokeGuardedCallbackDev (react-dom.development.js:3994)
    at invokeGuardedCallback (react-dom.development.js:4056)
    at beginWork$1 (react-dom.development.js:23964)
    at performUnitOfWork (react-dom.development.js:22776)
    at workLoopSync (react-dom.development.js:22707)
    at renderRootSync (react-dom.development.js:22670)
    at performSyncWorkOnRoot (react-dom.development.js:22293)
    at scheduleUpdateOnFiber (react-dom.development.js:21881)
    at updateContainer (react-dom.development.js:25482)
    at react-dom.development.js:26021
    at unbatchedUpdates (react-dom.development.js:22431)
    at legacyRenderSubtreeIntoContainer (react-dom.development.js:26020)
    at Object.render (react-dom.development.js:26103)
    at Module.<anonymous> (index.js:7)
    at Module../src/index.js (index.js:18)
    at __webpack_require__ (bootstrap:856)
    at fn (bootstrap:150)
    at Object.1 (reportWebVitals.js:14)
    at __webpack_require__ (bootstrap:856)
    at checkDeferredModules (bootstrap:45)
    at Array.webpackJsonpCallback [as push] (bootstrap:32)
    at main.chunk.js:1
 

Структура проекта

введите описание изображения здесь

App.js

 import './App.css';
import {BrowserRouter as Router,Route,Switch} from 'react-router-dom';
import { TeamPage } from './pages/TeamPage';
import { MatchPage } from './pages/MatchPage';

function App() {
  return (
   <div className = "App"> 
    <Router>
      <Switch>


        
 
        <Route exact path="/teams/:teamName" >
          <TeamPage />
        </Route>

        <Route  path="/teams/:teamName/matches/:year">
          <MatchPage />
        </Route>  

       

      </Switch>

    </Router> 
  </div>
  );
}

export default App;
 

MatchPage.js

 import { React,useEffect, useState} from 'react';
import { MatchDetailCard } from '../components/MatchDetailCrd';
import { MatchSmallCard } from '../components/MatchSmallCard';
import { useParams } from 'react-router-dom';
export const MatchPage = () =>{
  
  const [matchess,setMatches] = useState([]);
  const [teamName,year]=useParams();//Error is here
  useEffect( 
    ()=>{
        const fetchMatches = async()=>{
           const response = await fetch(`http://localhost:8080/team/${teamName}/matches?year=${year}`);
           const data = await response.json();
           console.log(data);
           setMatches(data);
            
        };
        fetchMatches();

    },[]
);
  return (
      <div className = "MatchPage"> 
      <h1>Match Page</h1>
          {
              matchess.map(match=><MatchDetailCard teamName={teamName} match={match}/>)
          }
      </div>
    
  );
}
 

Как Бы То Ни Было TeamPage.js работает хорошо, и я мог бы извлечь там имя команды param.
Тот же код используется в MatchPage.js. Но не работает.

Зависимости PFB

 {
  "name": "ipl-frontend",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "^5.12.0",
    "@testing-library/react": "^11.2.7",
    "@testing-library/user-event": "^12.8.3",
    "react": "^17.0.2",
    "react-dom": "^17.0.2",
    "react-router-dom": "^5.2.0",
    "react-scripts": "4.0.3",
    "
 

введите описание изображения здесь

Эта страница работает. Но ниже URL на снимке экрана не работает

введите описание изображения здесь

Пожалуйста, помогите.версия React js 17

Ответ №1:

Способ, которым вы использовали параметры использования в компоненте MatchPages, неверен.

 const [teamName,year]=useParams(); //Error is here
 

Это неверно, так как параметры использования предоставляют объект, поэтому правильный способ деструкции был бы таким-

 const { teamName,year }=useParams();
 

Теперь вы можете использовать его в компоненте MatchPage.

Прикрепление URL — адреса для документов- https://reactrouter.com/web/example/url-params