首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Laravel中使用react query

如何在Laravel中使用react query
EN

Stack Overflow用户
提问于 2022-09-12 19:19:04
回答 1查看 175关注 0票数 0

我遵循一个使用react查询的示例,这个示例可以很好地处理测试数据,但是当它击中我正在构建的后端时,我的意思是,它检索信息,但不缓存信息,总是访问服务器,但是使用这个示例,这是没有发生的。

钩子/user.js

代码语言:javascript
复制
import { useQuery } from "react-query";
import axios from "axios";    

export const useUsers = (activePage) => {
    return useQuery(
      // Add activePage as a dependency
      ["users", activePage],
      async () => {
        const { data } = await axios.get(
           //works fine here
          `https://reqres.in/api/users?page=${activePage}`

           //Here not works properly
          //`http://127.0.0.1:8000/api/users?page=${activePage}`
        );
   
        return data;
      },
      // This tells React-Query that this is Query is part of
      // a paginated component
      { keepPreviousData: true }
    );
};

index.js

代码语言:javascript
复制
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import { QueryClient, QueryClientProvider } from "react-query";
import { ReactQueryDevtools } from "react-query/devtools";    
const queryClient = new QueryClient(); // Global Store Instance

ReactDOM.render(
 <QueryClientProvider client={queryClient}>
  <React.StrictMode>
    <App />
  </React.StrictMode>
   <ReactQueryDevtools initialIsOpen={false} />
  </QueryClientProvider>,
  document.getElementById('root')
);    

reportWebVitals();

App.js

代码语言:javascript
复制
import { useState } from "react";
import TableHeader from "./components/tableHeader/TableHeader";
import TableRow from "./components/tableRow/TableRow";
import Pagination from "./components/pagination/Pagination";
// Import the hook
import { useUsers } from "./hooks/users";

const App = () => {
 const [activePage, setActivePage] = useState(1);

 // React Query takes care of calling
 // userUsers hook when App.js is rendered.
 const usersList = useUsers(activePage);

 return (
   <>
     <TableHeader />
     {/* map through users list */}
     {usersList.data &&
       usersList.data.data.map((user) => <TableRow user={user} key={user.id} />)}
     <Pagination
       activePage={activePage}
       setActivePage={setActivePage}
       pages={2}
     />
   </>
 );
};

export default App;

在这个例子中,当我再次访问api时,我的意思是,我两次访问其他页面,在“网络”选项卡中写着:(磁盘缓存)

这是预期的行为,但是当它使用我的laravel api时,它不能正常工作,它能够检索信息,但总是访问服务器,而不是缓存。

在我的laravel应用程序中,我有这样一个:

路由/api.php

代码语言:javascript
复制
Route::get('/users', [UsersController::class, 'index']);

UsersController.php

代码语言:javascript
复制
...
public function index()
    {

        return User::paginate(10);
    }
...

前端使用这个url:

http://localhost:3000/

后端使用的是:

http://localhost:8000/

也许是因为港口?但是使用外部api:,它的工作没有问题,它像预期的那样使用缓存,做一些奇怪的事情。我想我需要修改我的api

这是本地api的响应:

代码语言:javascript
复制
{
   "current_page":1,
   "data":[
      {
         "id":1,
         "first_name":"sergio",
         "avatar_url":"https:\/\/url",    
         "age":30,
         "created_at":"2022-09-11T22:29:52.000000Z",
         "updated_at":"2022-09-11T22:29:52.000000Z"
      },
      {
         "id":2,
         "first_name":"jhon",
         "avatar_url":"https:\/\/url",
         "age":39,
         "created_at":"2022-09-11T22:30:03.000000Z",
         "updated_at":"2022-09-11T22:30:03.000000Z"
      },
     ...
...
   ],
   "first_page_url":"http:\/\/127.0.0.1:8000\/api\/users?page=1",
   "from":1,
   "last_page":9,
   "last_page_url":"http:\/\/127.0.0.1:8000\/api\/users?page=9",   
   "next_page_url":"http:\/\/127.0.0.1:8000\/api\/users?page=2",
   "path":"http:\/\/127.0.0.1:8000\/api\/users",
   "per_page":3,
   "prev_page_url":null,
   "to":3,
   "total":25
}

我能做什么?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2022-09-13 08:37:13

将控制器中的返回替换为此

代码语言:javascript
复制
return response()->json(User::paginate(10));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73694275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档