【发布时间】:2021-07-15 19:40:53
【问题描述】:
我正在使用 redux-toolkit 并且有 2 个切片:“auth”和“profile”
auth => 处理有关令牌的信息
profile => 处理有关用户帐户的信息
当用户尝试登录时,我向 api 发送请求,它返回用户令牌和帐户信息。然后我需要保存这些信息。我将令牌放入相应的字段(在同一切片中)。而且我需要将我的帐户信息放入“profile”切片(登录处理发生在“auth”切片中)。现在我只是从 'auth' 切片中调度 setProfile 操作。
从“auth”切片发送“profile”动作是反模式吗? 或者我必须将这个逻辑从 redux 移动到组件? 还是在切片之外进行“登录”操作? 还是我需要将它们全部保存在一个切片中?
// PROFILE SLICE | profile.js
const initialState = {
data: {},
status: 'idle'
}
export const profileSlice = createSlice({
name: 'profile',
initialState,
reducers: {
setProfile(s, {payload: profile}) {
s.profile = profile
}
}
})
export const {setProfile} = userSlice.actions;
export default profileSlice.reducer
// AUTH SLICE | auth.js
import {setProfile} from './profile' // import action creator from profile slice
const initialState = {
token: null,
status: 'idle'
}
export const authSlice = createSlice({
name: 'auth',
initialState,
reducers: {
setToken(s, {payload: token}) {
s.token = token
}
}
})
export const login = ({email, password}) => dispatch => {
return api.auth.login({
email,
password
})
.then(res => {
const {token, ...profile} = res.data
dispatch(setToken(token))
dispatch(setProfile(profile)
})
}
export const {setToken} = authSlice.actions;
export default authSlice.reducer
【问题讨论】:
-
您的选择很少。 - 从您的成功处理程序发送另一个操作。或者您可以编写中间件(或使用一些中间件)来观察操作并在处理您的成功身份验证操作时分派另一个。
标签: javascript reactjs redux redux-toolkit