iT邦幫忙

2023 iThome 鐵人賽

0
SideProject30

30天製作與眾不同的TodoList吧!系列 第 28

獲取登入後的資料

  • 分享至 

  • xImage
  •  

前面我們已經成功實現會員的登入 & 註冊,接下來就是需要在會員登入後將該會員的資料存進 store 。
首先我們會需要建立一個新的 slice ,用於將 store 中的資料進行分開管理,在來這個 slice 中的 initial data 會是以下格式

{
    id: "",
    mail:""
}

這邊我們只需要 user 的 id,用於辨識 todo 的所有者,並且我們的 email 就會是 user 的帳號,這邊先存這兩項資料,再來就是我們需要一個 reducer 用於更新 state ,首先我們要先從傳入的資料中取出我們要用的部分

updateUser: (state, action) => {
    const { id, email } = action.payload;

    return {
        ...state,
        ...(id && { id }),
        ...(email && { email }),
    };
},

這邊可以看到,這邊使用解構賦值的方式從 payload 中取得其中的 id, mail 這兩筆資料,並且透過展開運算符在 return 的時候,回傳一份新的 object,若是有資料包含 id 就更新 id,有 mail 就更新 mail,這樣可以提高 code 的穩定性。

在來就是將這個 slice 添加至 store 中

reducer: {
    todo: todoSlice.reducer,
    user: userSlice.reducer,
},

接下來會透過 customHook 的方式將取用 userSlice 的方式做一個包裝

|- src
|-- hooks
|--- useUser.js
function useUser() {
    const dispatch = useDispatch();
    const user = useSelector(state => state.user);

    const setUser = data => {
        dispatch(updateUser(data));
        // console.log('newData', user);
    };
    return { user, setUser };
}

接下來我們要使用這個 slice 的時候,只需要從 useUser 中取用 user & setUser 這兩個 method 就可以了。

接下來回到登入畫面使用這個 hook
// index.jsx

// set userData
const { setUser } = useUser();
...登入成功後

setUser(data.user);

這樣我們就成功將資料存進 store 了。


上一篇
使用supabase實現會員功能
下一篇
讓user可以獲得各自的資料
系列文
30天製作與眾不同的TodoList吧!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言