[英]withLatestFrom doesn't accept StateObservable
当前的行为是什么?
“withLatestFrom”给出以下错误:'StateObservable<CombinedState<{ auth: AuthState; }>>' 不可分配给“ObservableInput”类型的参数。
如果当前行为是错误,请提供重现步骤和使用 JSBin、StackBlitz 或类似工具的问题的最小演示。
登录史诗:
import { filter, withLatestFrom, mergeMap } from 'rxjs/operators';
import { AppEpic } from 'src/app/store';
import { authSignInRequest } from 'src/auth/slice/authSlice';
export const signInEpic: AppEpic = (
action$,
state$
) =>
action$.pipe(
filter(authSignInRequest.match),
withLatestFrom(state$),
mergeMap(([action,state]) => {
return [];
})
);
设置:
import { AnyAction, combineReducers, configureStore } from '@reduxjs/toolkit';
import { combineEpics, createEpicMiddleware, Epic } from 'redux-observable';
import authReducer from 'src/auth//slice/authSlice';
// import { rootAuthEpic } from 'src/auth/slice/epics';
import { signInEpic } from 'src/auth/slice/epics/signInEpic';
const basicReducers = {
auth: authReducer,
};
const reducer = combineReducers(basicReducers);
export const rootEpic = combineEpics(
signInEpic,
);
export type AppState = ReturnType<typeof reducer>;
export type AppEpic = Epic<AnyAction, AnyAction, AppState>;
const epicMiddleware = createEpicMiddleware<AnyAction, AnyAction, AppState>();
export const store = configureStore({
reducer,
middleware: [epicMiddleware]
});
epicMiddleware.run(rootEpic);
授权切片
import { createSelector, createSlice, PayloadAction, createAction } from '@reduxjs/toolkit'
import { AppState } from 'src/app/store/reducer'
import { SignInRequestPayload, User } from 'src/auth/types'
type AuthState = {
user: User | null
token: string | null
}
const initialState: AuthState = {
user: null,
token: null,
}
const sliceName = 'auth'
const slice = createSlice({
name: sliceName,
initialState: { user: null, token: null } as AuthState,
reducers: {
// setCredentials: (
// state,
// { payload: { user, token } }: PayloadAction<{ user: User; token: string }>
// ) => {
// state.user = user
// state.token = token
// },
},
})
export const authSignInRequest = createAction<void>(
`${sliceName}/authSignInRequest`
);
export const authSignInSuccessful = createAction<void>(
`${sliceName}/authSignInSuccessful`
);
export const authSignInFailed= createAction<void>(
`${sliceName}/authSignInSuccessful`
);
//== Selectors ==//
export const getAuthUser = (state: AppState): User | null =>
state.auth.user;
export const getAuthUserUsername = (state: AppState): string | undefined =>
state.auth.user?.username;
export const getAuthIsUserSignedIn = createSelector(
getAuthUser,
(user) => !!user
)
//== Exports ==//
export const {
setCredentials,
} = slice.actions
export default slice.reducer
export const selectCurrentUser = (state: AppState) => state.auth.user
预期的行为是什么? withLatestFrom 应该取 state$。
哪些版本的 redux-observable 以及哪些浏览器和操作系统会受到此问题的影响? 这在以前版本的 redux-observable 中有效吗? 我刚刚设置了这个新项目,所以我使用最新的
"redux-observable": "^2.0.0",
"rxjs": "^7.4.0",
"@reduxjs/toolkit": "^1.7.1",
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.