有什么方法可以在NGRX(Angular)上的还原器中重复使用实体数据,以便没有多个API调用?
有什么方法可以连接NGRX实体中的选择器和还原器?目前,我每次发送操作并进入还原器的这一部分时,我都在做一个API呼叫:
export class SearchComponent {
constructor(private moviesService: MoviesService, private store: Store) {}
searchFieldChanged(query: string) {
this.moviesService
.getMovies()
.subscribe((movies) =>
this.store.dispatch(retrievedMovieListFiltered({ movies, query }))
);
}
}
。
export const moviesReducer = createReducer<PopularMovieState>(
initialState,
on(retrievedMovieList, (state, { movies }) =>
movieAdapter.addMany(movies, state)
),
on(retrievedMovieListFiltered, (state, { movies, query }) =>
movieAdapter.setAll(
movies.filter((movie) => movie.title.includes(query)),
{ ...state }
)
)
。
我想找到一种方法,每次用户键入字符时,都可以在不提供API调用的情况下进行查询。
换句话说,有什么办法可以使用我编写的其他选择器(最后一个):
export const moviesFeatureSelector =
createFeatureSelector<PopularMovieState>('movies');
const { selectEntities, selectAll } = movieAdapter.getSelectors();
export const selectMoviesEntities = createSelector(
moviesFeatureSelector,
selectEntities
);
export const selectMovies = createSelector(moviesFeatureSelector, selectAll);
export const selectMovie = createSelector(
selectMoviesEntities,
selectRouteParams,
(movies, { movieId }) => movies[movieId]
);
export const selectFilteredMovies = (title: string) =>
createSelector(selectMovies, (movies) =>
movies.filter((movie) => movie.title.includes(title))
);
并将其应用于还原器?我的意思是,我需要更新是否正确解释。
如果是USEFU,我可以提供我的回购链接
is there any way to connect a selector and a reducer in ngRx entities ? At the moment I am doing an API call each time I send the action and enters to this part of the reducer:
export class SearchComponent {
constructor(private moviesService: MoviesService, private store: Store) {}
searchFieldChanged(query: string) {
this.moviesService
.getMovies()
.subscribe((movies) =>
this.store.dispatch(retrievedMovieListFiltered({ movies, query }))
);
}
}
.
export const moviesReducer = createReducer<PopularMovieState>(
initialState,
on(retrievedMovieList, (state, { movies }) =>
movieAdapter.addMany(movies, state)
),
on(retrievedMovieListFiltered, (state, { movies, query }) =>
movieAdapter.setAll(
movies.filter((movie) => movie.title.includes(query)),
{ ...state }
)
)
.
I would like to find a way to filter among the movies array with the query provided without doing an API call each time the user types a character.
In other words, is there any way I could use this other selector I have written (last one):
export const moviesFeatureSelector =
createFeatureSelector<PopularMovieState>('movies');
const { selectEntities, selectAll } = movieAdapter.getSelectors();
export const selectMoviesEntities = createSelector(
moviesFeatureSelector,
selectEntities
);
export const selectMovies = createSelector(moviesFeatureSelector, selectAll);
export const selectMovie = createSelector(
selectMoviesEntities,
selectRouteParams,
(movies, { movieId }) => movies[movieId]
);
export const selectFilteredMovies = (title: string) =>
createSelector(selectMovies, (movies) =>
movies.filter((movie) => movie.title.includes(title))
);
and apply it to the reducer ? I mean, I need to update the not sure if I am explaining correctly.
I can provide my repo link if it is usefu
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
由于您在NGRX之外执行请求,因此可以在组件初始化时加载电影,然后在用户输入上过滤它们
Since you are doing the request outside of ngrx you can just load the movies when the component initializes, and filter them on user input