Как параметры запроса могут быть отправлены и использованы для этой страницы в react?

#reactjs #react-router #react-hooks #react-router-dom #react-router-v4

#reactjs #react-router #реагирующие хуки #react-router-dom #react-router-v4

Вопрос:

Я нашел эту кодовую базу из учебника. Я пытаюсь извлечь данные из разбитого на страницы API.

Дело в том, что, похоже, здесь не используется react-router .

  const [hits, setHits] = useState([]);
     const [pageCount, setPageCount] = useState(1); #New
    const [isLoaded, setisLoaded] = useState(false);
    const [currentPage, setcurrentPage] = useState(0); #New
    const [query, setQuery] = useState('startups'); 

    const URL = `https://hn.algolia.com/api/v1/search?query=${query}amp;page=${currentPage}`;

    const handleFetch = () => {
        fetch(URL)
            .then(response => response.json())
            .then(body => {
                setData([...body.hits]);
                                setPageCount(body.nbPages); #New
                                setisLoaded(true); #New
            })
            .catch(error => console.error('Error', error));
    };

      #New
    const handlePageChange = (selectedObject) => {
        setcurrentPage(selectedObject.selected);
        handleFetch();
    };

return (
    <div>
         <label>Search</label>
        <input type="text" onChange={(event) => setQuery(event.target.value)} />
        <button onClick={handleFetch}>Get Data</button>

            {isLoaded ? (
                hits.map((item) => {
                    return (
                        <NewsCard
                            url={item.url}
                            title={item.title}
                            author={item.author}
                            key={item.objectID}
                        />
                    );
                })
            ) : (
                <div></div>
            )}    
                       #New
            {isLoaded ? (
                <ReactPaginate
                    pageCount={pageCount}
                    pageRange={2}
                    marginPagesDisplayed={2}
                    onPageChange={handlePageChange}
                    containerClassName={'container'}
                    previousLinkClassName={'page'}
                    breakClassName={'page'}
                    nextLinkClassName={'page'}
                    pageClassName={'page'}
                    disabledClassNae={'disabled'}
                    activeClassName={'active'}
                />
            ) : (
                <div>Nothing to display</div>
            )} 

    </div>
);
  
}
 

Как можно использовать currentPage и Query в маршрутизаторе react в качестве параметров запроса, чтобы currentPage по умолчанию был равен 1, если в URL-адресе нет запроса или параметра currentPage, а также всякий раз, когда вы изменяете запрос или URL-адрес currentPage, также будут обновляться параметры запроса ‘?’, такие как https://example.com?currentPage=9amp;query=startup

Ответ №1:

Вы можете использовать историю для отправки параметров запроса в URL,

 history.push(`/?currentPage=${currentPage}amp;query=${queryString}`)
 

проверьте этот репозиторий, чтобы узнать больше об истории

Комментарии:

1. Разве я не должен указывать маршрут, по которому я сейчас нахожусь в react-router?

2. вы можете отправить параметры запроса из вашего текущего компонента, проблем быть не должно.