繁体   English   中英

withLatestFrom 不接受 StateObservable

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM