问题描述
我想在ngrx中设置令牌和刷新令牌,并为每个请求保存和使用令牌,并且在重新加载页面时,不要在redux中删除数据。
我为此实现了这种状态:
我调度数据:
this.getUser@R_797_4045@ion().toPromise().then(responset => {
if (response.success === true) {
this.store.dispatch(new SetUser@R_797_4045@ion({
displayName: responset['result']['displayName'],userInfo: responset.result.claims,RefreshTokenStatus:false,accesstoken:response['result']['access_token'],refreshToken:response['result']['refresh_token']
}))
}
});
在我定义商店的模块中:
StoreModule.forFeature('@R_797_4045@ion',reducer),EffectsModule.forFeature([])
这是我的减速器:
const initialState = adapter.getinitialState({
accesstoken: null,refreshToken: null,RefreshTokenStatus: false,userInfo: null,displayName: null
})
export function reducer(state = initialState,action: TokenAction): TokenState {
switch (action.type) {
case TokenActionTypes.User@R_797_4045@ion:
return adapter.addOne(action.payload,state)
default:
return state;
}
}
这是我的模特:
export interface TokenState {
accesstoken: string;
refreshToken: string;
RefreshTokenStatus: boolean;
userInfo: string[];
displayName: string;
}
这是我的Selector
:
export interface State extends fromState.State,EntityState<TokenState> {
UserInfo: TokenState;
}
export const adapter: EntityAdapter<TokenState> = createEntityAdapter<TokenState>();
const getTokenFetureState = createFeatureSelector<TokenState>('@R_797_4045@ion');
export const getAccesstoken=createSelector(
getTokenFetureState,state => state.accesstoken
)
这是动作:
export class SetUser@R_797_4045@ion implements Action {
readonly type = TokenActionTypes.User@R_797_4045@ion;
constructor(public payload: TokenState) {
}
}
export type TokenAction = SetUser@R_797_4045@ion
现在我有拖曳问题:
this.store.pipe(select(fromTokenSelect.getAccesstoken)).subscribe(data=>{
console.log(data)
})
@ ngrx / entity:传递给
selectId
实现的实体未定义返回。您可能应该提供自己的selectId
实现。传递的实体:对象selectId
实现:(实例)=> instance.id
我该如何解决这个问题?
解决方法
您将ngrx/entity
用于非实体数据。实体设计用于处理数据数组,其中每个元素都有某种唯一的标识符。这就是它引发错误的原因:您正在向它提供非实体兼容的数据。您需要编写一个简单的reducer来简单地设置状态,而不是试图将数据添加到不存在的实体中。
对于页面重新加载,NgRx将始终重置数据,这是预期的行为。如果要随着时间的推移保留数据,则需要实施localStorage
保存。