next-redux-wrapper Wrapper.getStaticProps 无法使用

Posted

技术标签:

【中文标题】next-redux-wrapper Wrapper.getStaticProps 无法使用【英文标题】:next-redux-wrapper Wrapper.getStaticProps not working with 【发布时间】:2021-11-06 00:59:44 【问题描述】:

这是我的后端控制器,我正在获取房间数据

const allRooms = catchAsyncErrors(async (req, res) => 

    const resPerPage = 4;

    const roomsCount = await Room.countDocuments();

    const apiFeatures = new APIFeatures(Room.find(), req.query)
        .search()
        .filter()

    let rooms = await apiFeatures.query;
    let filteredRoomsCount = rooms.length;

    apiFeatures.pagination(resPerPage)
    rooms = await apiFeatures.query;

    res.status(200).json(
        success: true,
        roomsCount,
        resPerPage,
        filteredRoomsCount,
        rooms
    )

)

这是我正在发送有效负载和数据的 redux 操作

    export const getRooms = (req, currentPage = 1, location = '', guests, category) => async (dispatch) => 
    try 

        const  origin  = absoluteUrl(req);

        let link = `$origin/api/rooms?page=$currentPage&location=$location`

        if (guests) link = link.concat(`&guestCapacity=$guests`)
        if (category) link = link.concat(`&category=$category`)

        const  data  = await axios.get(link)

        dispatch(
            type: ALL_ROOMS_SUCCESS,
            payload: data
        )

     catch (error) 
        dispatch(
            type: ALL_ROOMS_FAIL,
            payload: error.response.data.message
        )
    

这是我的 reducer 函数,调度房间数据

export const allRoomsReducer = (state =  rooms: [] , action) => 
    switch (action.type) 

        case ALL_ROOMS_SUCCESS:
            return 
                rooms: action.payload.rooms
            

        case ALL_ROOMS_FAIL:
            return 
                error: action.payload
            

        case CLEAR_ERRORS:
            return 
                ...state,
                error: null
            

        default:
            return state
    

在这里,我想使用 wrapper.getStaticProps 获取数据,但出现错误,但是当我使用 wrapper.getServerSideProps 时,我得到了数据。

 export const getStaticProps = wrapper.getStaticProps(store=> async ( req, query, )  => 
  await store.dispatch(getRooms(req, query.page, query.location, query.guests, query.category))
)

【问题讨论】:

错误是什么? 无法读取未定义的页面, 【参考方案1】:

似乎在( req, query, ) => 中,queryundefined

通过documentation of next,getStaticPropscontext 对象没有query 属性。它仅适用于getServerSideProps

另见this info:

仅在构建时运行 由于 getStaticProps 在构建时运行,因此它不会接收仅在请求期间可用的数据,例如查询参数或 HTTP 标头,因为它会生成静态 html

【讨论】:

以上是关于next-redux-wrapper Wrapper.getStaticProps 无法使用的主要内容,如果未能解决你的问题,请参考以下文章

next-redux-wrapper 中的空状态

将 getStaticProps 与 next-redux-wrapper 一起使用

使用 next-redux-wrapper 将 Google Analytics 添加到 Nextjs 应用程序

next-redux-wrapper 服务器不与客户端同步?

关于未找到状态且不可分配给类型的 next-redux-wrapper 的 Typescript 警告

Next.js:在 getServerSideProps 中使用带有 TypeScript 的 next-redux-wrapper 调用 Thunks?