Не удается прочитать свойство ‘location’ неопределенных перехватов react

#reactjs #api #routes #react-router #react-hooks

#reactjs #API #маршруты #react-маршрутизатор #реагирующие перехваты

Вопрос:

Я извлек данные из API, НО теперь при нажатии на имя исполнителя отображается страница сведений. просто, когда я перезагружаю страницу, подробная информация мигает, перезаписывается и исчезает

Я решил извлечь App.js компонент, buid направляет туда и передает реквизиты дочерним компонентам

     function App() {
  const url = `http://ws.audioscrobbler.com/2.0/?method=chart.gettoptracksamp;api_key=KEYamp;format=json`
    const [trackList, setTrackList]  = useState([])
    useEffect(() => {
        loadData()
    }, [])
    const history = createMemoryHistory()
    const loadData = async () => {
            const res = await fetch(url)
            const data = await res.json()
            setTrackList(data.tracks.track)
            console.log(data.tracks.track)
    }
  return (
    <div>
   <Router>
        <NavBar />
        <Route path="/" render={(props) => <TrackList trackList={trackList} />}/>
        <Route path="/artist/:name" render={(props) => <TrackListDetails trackList={trackList} />} />      
   </Router>
    </div>
  );
}
 

В компоненте TrackList я отображаю данные с использованием реквизитов.
const список дорожек = ({Список дорожек}) => {

     return (
        <div>
           <Container>
              <h1 className='mb-5 mt-5'>Top TrackList</h1>
             
                {trackList.map(item => {
                    return (
                        
                        <Row className='mt-1' style={{padding: '5px', border: '1px solid #000', display: 'flex', justifyContent: 'flex-start', alignItems: 'center'}}>
                        <Col lg={1} md={1} sm={1}>
                        <a href={item.artist.url}><img src={item.image[1]['#text']} /></a>
                            
                        </Col>
                        <Col lg={11} md={11} sm={11}>
                         
                        <Link to={`/artist/${item.artist.name}`}><h6>{item.artist.name}</h6></Link>
                        <p>"{item.name}"</p>
                        </Col>
                        </Row>
                       

                    )
                })}
                             
          </Container>
        </div>
    )
}
 

И в деталях отображается информация о компоненте. секунда и перенаправляет главную страницу со списком треков

 const TrackListDetails = ({ trackList }) => {
    const { name } = useParams();

    const history = useHistory();
    const location = useLocation();

        const targetArtist = trackList.find(item => item.name === name);
        console.log('props', name)
    
     
    return (
        <Container>
            <Row>
                <Col>
            
                    <h4>Singer name: </h4>
                
                                <h1>{name}</h1>
             
            
                  
                    <h4>Description </h4>
                </Col>
            </Row>
            <Row>
            <button onClick={() => history.goBack() } >Go to home</button>
            </Row>
        </Container>
        
    )
}
 

Ответ №1:

Глупая ошибка OMG. все работает. просто нужно было добавить точное значение в маршрут!

  <Router>
     
        <NavBar />
        
        <Route exact path="/" render={(props) => <TrackList trackList={trackList} />}/>
        <Route exact path="/artist/:name" render={(props) => <TrackListDetails trackList={trackList} />} />      
   </Router>
 

Теперь он работает правильно!