reactjs - 如何在 RTK 查询中自动重新获取数据

标签 reactjs redux-toolkit rtk-query

当我移动下一页或移动到另一个页面或更新数据时...数据不重新获取...当我重新加载页面然后重新获取数据...无需重新加载如何使用 RTK 查询重新获取数据..

这是代码

export const userService = createApi({
    reducerPath: 'userService',
    baseQuery: fetchBaseQuery({ baseUrl: 'http://localhost:5000/api/user/' }),
    tagTypes: ["Userdetail",'Profile_update'],
    endpoints: (builder) => ({
        getuserdetails: builder.query({
            query: () => ({
                url: 'userdetails',
                // method: 'GET',
                headers: {
                    'Content-type': 'application/json',
                    'auth-token': localStorage.getItem('loginToken')
                }
            }),
            providesTags : ['Userdetail']
        }),

        updateuserdetail: builder.mutation({
            query: (newbody) => {
                const {id,...data} = newbody
                return{
                    url: `profile_update/${id}`,
                    method: 'PUT',
                    body: data,
                    headers: {
                        'Content-type': 'application/json',
                        'auth-token': localStorage.getItem('loginToken')
                    }
                }
            },
            invalidatesTags :['Profile_update']
        }),
    })

})

在渲染任何内容时调用 useGetuserdetailsQuery 每个组件

function ProtectedRouter(props) {
    const responseinfo  = useGetuserdetailsQuery({},{ refetchOnMountOrArgChange: true })
    const navigate = useNavigate()
    const { Component  } = props 
    const login = localStorage.getItem('loginToken')
    console.log(responseinfo)
    useEffect(() => {
        console.log('useeefect working')
        if (responseinfo.data) {            
            if (responseinfo.data.errormsg) {               
                if (responseinfo.data.errormsg.name === 'TokenExpiredError') {
                    localStorage.removeItem('loginToken')
                    navigate('/login',{state:{'logoutmsg':responseinfo.data.errormsg}})
                    navigate(0)
                }
            }
        }
    })
    
    return (
        <>
         {login? <Component /> : <Navigate to='/login' />}
        
        </>
    )
}

最佳答案

在使用 useGetuserdetailsQuery 获取数据的页面中,使用此 refetchOnMountOrArgChange: true。当组件挂载或其参数更新时,它将重新获取数据。

useGetuserdetailsQuery({}, { refetchOnMountOrArgChange: true })

此文档将对您有所帮助 https://redux-toolkit.js.org/rtk-query/api/createApi

关于reactjs - 如何在 RTK 查询中自动重新获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72447522/

相关文章:

javascript - 了解 React-Redux 工具包语法?

javascript - 在 React Redux 中,如何重用执行 fetch 的钩子(Hook),而无需多次执行该 fetch?

reactjs - 如何实现rtk的createApi查询去抖动

javascript - 如何在收到 websocket 消息时更新从 RTK 查询返回的 Hook 数据

javascript - React 未捕获类型错误 : Cannot read property 'replace' of undefined

javascript - react : filter array: Can I work with elements that didn't pass the test?

reactjs - 如果未传入,useSelector 从哪里拉取状态?

reactjs - 如何设置等同于 fetch 的 { credentials : "include" } in Redux Toolkit's createApi?

javascript - 在promise中获取构造函数变量

reactjs - 如何在enzyme中调用多个setProps?