Amr*_*uta 2 typescript ngrx angular ngrx-store angular8
我正在NgRx我的新 Angular 8 项目中使用该库。我被告知他们使用createActionie创建操作NgRx 8,但他们使用NgRx 7. 我接到了一项任务,其中我使用了NgRx 8我的减速器,现在我必须将其更改为NgRx 7。我的动作和减速器如下:
书本.actions.ts
import { createAction, props } from "@ngrx/store";
import { Book } from "./book";
export const BeginGetBooksAction = createAction("BeginGetBooks");
export const SuccessGetBooksAction = createAction(
"SuccessGetBooks",
props<{ payload: Book[] }>()
);
export const BeginAddBookAction = createAction(
"BeginAddBook",
props<{ payload: Book }>()
);
export const SuccessAddBookAction = createAction(
"SuccessAddBook",
props<{ payload: Book[] }>()
);
Run Code Online (Sandbox Code Playgroud)
书本.reducer.ts
import { Action, createReducer, on } from "@ngrx/store";
import * as BooksActions from "./book.action";
import { Book } from "./book";
export interface BooksState {
Books: Book[];
ReadBooks: { book: Book; addedOn: Date }[];
WantToReadBooks: { book: Book; addedOn: Date }[];
editBook: Book;
}
const initialState: BooksState = {
Books: [],
ReadBooks: [],
WantToReadBooks: [],
editBook: new Book()
};
export function booksReducer(state = initialState, action: Action) {
switch (action.type) {
case BooksActions.BeginGetBooksAction.type:
return state;
case BooksActions.SuccessGetBooksAction.type:
return { ...state, Books: action.payload };
case BooksActions.BeginAddBookAction.type:
return state;
case BooksActions.SuccessAddBookAction.type:
return { ...state, Books: action.payload };
default:
return state;
}
}
Run Code Online (Sandbox Code Playgroud)
我收到一个错误action.payload
Property 'payload' does not exist on type 'Action'.
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我我做错了什么吗???
我在NgRx 创建者函数 101中写下了一个比较。
在本文中,您可以了解如何组合两个版本的语法:
export const addToCart = createAction(
// action's type
'[Product List] Add to cart',
// optional payload
props<{ sku: string }>(),
)
export const removeFromCart = createAction(
'[Product List] Remove from cart',
props<{ sku: string }>(),
)
export function reducer(
state = initialState,
action: ReturnType<typeof addToCart> | ReturnType<typeof removeFromCart>,
) {
switch (action.type) {
case addToCart.type:
return {
...state,
cartItems: {
...state.cartItems,
[action.sku]: (state.cartItems[action.sku] || 0) + 1,
},
}
case removeFromCart.type:
return {
...state,
cartItems: {
...state.cartItems,
[action.sku]: Math.max((state.cartItems[action.sku] || 0) - 1, 0),
},
}
default:
return state
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
929 次 |
| 最近记录: |