如何实现redux-toolkit和next,js又不丢s-s-r

Posted

技术标签:

【中文标题】如何实现redux-toolkit和next,js又不丢s-s-r【英文标题】:How to implement redux-toolkit and next,js and not lose s-s-r 【发布时间】:2021-09-21 14:06:40 【问题描述】:

我正在尝试在我的 Next.js 项目中实现 redux-toolkit,而不会丢失我从外部 API 获取的数据的 s-s-r 选项。我遵循了 next.js GitHub 中的示例,但这样做导致在我的 redux 切片中获取数据时没有 s-s-r。我想知道如何获取数据并将该数据保存在 Redux 状态。这是我写的: 这是 store.js 文件

export const store = configureStore(
  reducer: 
    users: usersReducer,
  ,
);

_app.js 文件

import  Provider  from 'react-redux';
import  store  from '../app/store';

const MyApp = ( Component, pageProps ) => 
  return (
    <Provider store=store>
      <Component ...pageProps />
    </Provider>
  );
;

export default MyApp;

usersSlice.js 文件

import  createSlice, createAsyncThunk  from '@reduxjs/toolkit';

const initialState = 
  items: null,
  status: 'idle',
  error: null,
;

export const fetchUsers = createAsyncThunk('users/fetchUsers', async () => 
  const res = await fetch('https://jsonplaceholder.typicode.com/users');
  const users = await res.json();

  return users;
);

const usersSlice = createSlice(
  name: 'categories',
  initialState,
  reducers: ,

  extraReducers: 
    [fetchUsers.pending]: (state, action) => 
      state.status = 'loading';
    ,

    [fetchUsers.fulfilled]: (state, action) => 
      state.status = 'succeeded';
      state.items = action.payload;
    ,

    [fetchUsers.rejected]: (state, action) => 
      state.status = 'failed';
      state.error = action.error.message;
    ,
  ,
);

export default usersSlice.reducer;

最后是我从中获取数据的页面:

export default function Home() 
  const dispatch = useDispatch();
  const users = useSelector((state) => state.users.items);
  useEffect(() => 
    dispatch(fetchUsers());
  , [dispatch]);

  return (
    <div>
      <h1>users</h1>
      users &&
        users.length &&
        users.map((user) => <p key=user.id>user.name</p>)
    </div>
  );

如果我通过调度 fetchUsers 函数获取数据,它不会有 s-s-r,如果我使用 getServerSideProps,它不会保存在 redux 状态。我一无所知

【问题讨论】:

我有一个非常相似的设置,你有没有找到一个好的解决方案? 【参考方案1】:

如果您可以使用 Redux 而不是 redux-toolkit,请按照此示例进行操作 [https://github.com/vercel/next.js/blob/canary/examples/with-redux-persist]官方示例表单 Vercel/next.js。当我使用 redux 工具包为 Redux 编写 s-s-r 代码时,我也遇到了一些问题。目前这项工作正在进行中。将在可用时共享代码。姐姐

【讨论】:

以上是关于如何实现redux-toolkit和next,js又不丢s-s-r的主要内容,如果未能解决你的问题,请参考以下文章

如何实现具有固定宽度和动态高度的 Next.js Image 组件以保持图像的尺寸?

Next.js:在实现私有路由时,如何在重定向之前防止未经授权的路由/页面的闪烁?

redux-toolkit -> 检测到不可序列化的值

如何在 Storybook 中使用 redux-toolkit?

如何在 Next.js 中使用 next-auth 实现凭据授权?

如何在 Redux-toolkit 中使用两个不同的切片?