Ngrx selector not triggering updates
My state is :
export interface RequestState
tabsContent: TabContent;
Where TabContent
represent an array of visual tabs containing 1 Request each and additionnal infos :
export interface TabContent
tabInfo: TabInfo;
request: Request;
results?: any;
I have this specialized selector to get one Request from a single TabContent :
export const getRequestForTabInfo = (tabInfo: TabInfo) => createSelector(
getTabContent,
(tabContent: TabContent) =>
const tabContentFiltered = tabContent.filter(tab =>
tab.tabInfo.id === tabInfo.id
&& tab.tabInfo.index === tabInfo.index
&& tab.tabInfo.state === tabInfo.state);
if (tabContentFiltered && tabContentFiltered.length === 1)
return tabContentFiltered[0].request;
return as Request;
,
);
and this basic one to get all TabsContent :
export const getTabContent = createSelector(
getRequestFeatureState,
state => state.tabsContent,
);
based on this FeatureSelector :
const getRequestFeatureState = createFeatureSelector<RequestState>('requests');
Defined in a facade service :
tabsContent$: Observable<TabContent>;
constructor(private store: Store<fromRequest.State>)
this.tabsContent$ = this.store.pipe(
select(fromRequest.getTabContent),
takeUntil(this.componentDestroy()),
);
public getRequest(tabInfo: TabInfo): Observable<Request>
return this.store.pipe(
select(fromRequest.getRequestForTabInfo(tabInfo)),
takeUntil(this.componentDestroy()),
);
and used in the component :
private initializeComponent(): void
this.requestFacade.getRequest(this.tabInfo).pipe(
takeUntil(this.componentDestroy()),
).subscribe(request =>
console.log('request : ', request);
this.request = request;
);
this.requestFacade.tabsContent$.pipe(
takeUntil(this.componentDestroy()),
).subscribe(tab =>
console.log('tab : ', tab);
);
When the component is consctructed I get both logs, but when I update part of the related state (I update the content of one Request) only the tab
log appear.
Why is the filtered selector observable not doing anything ?
javascript angular typescript rxjs ngrx
add a comment |
My state is :
export interface RequestState
tabsContent: TabContent;
Where TabContent
represent an array of visual tabs containing 1 Request each and additionnal infos :
export interface TabContent
tabInfo: TabInfo;
request: Request;
results?: any;
I have this specialized selector to get one Request from a single TabContent :
export const getRequestForTabInfo = (tabInfo: TabInfo) => createSelector(
getTabContent,
(tabContent: TabContent) =>
const tabContentFiltered = tabContent.filter(tab =>
tab.tabInfo.id === tabInfo.id
&& tab.tabInfo.index === tabInfo.index
&& tab.tabInfo.state === tabInfo.state);
if (tabContentFiltered && tabContentFiltered.length === 1)
return tabContentFiltered[0].request;
return as Request;
,
);
and this basic one to get all TabsContent :
export const getTabContent = createSelector(
getRequestFeatureState,
state => state.tabsContent,
);
based on this FeatureSelector :
const getRequestFeatureState = createFeatureSelector<RequestState>('requests');
Defined in a facade service :
tabsContent$: Observable<TabContent>;
constructor(private store: Store<fromRequest.State>)
this.tabsContent$ = this.store.pipe(
select(fromRequest.getTabContent),
takeUntil(this.componentDestroy()),
);
public getRequest(tabInfo: TabInfo): Observable<Request>
return this.store.pipe(
select(fromRequest.getRequestForTabInfo(tabInfo)),
takeUntil(this.componentDestroy()),
);
and used in the component :
private initializeComponent(): void
this.requestFacade.getRequest(this.tabInfo).pipe(
takeUntil(this.componentDestroy()),
).subscribe(request =>
console.log('request : ', request);
this.request = request;
);
this.requestFacade.tabsContent$.pipe(
takeUntil(this.componentDestroy()),
).subscribe(tab =>
console.log('tab : ', tab);
);
When the component is consctructed I get both logs, but when I update part of the related state (I update the content of one Request) only the tab
log appear.
Why is the filtered selector observable not doing anything ?
javascript angular typescript rxjs ngrx
Because your input argument(tabInfo) hasn't changed, so it is not emitting any new value. Try changing the input argument after updating a relevant part of the state and check whether its working.
– KiraAG
Nov 14 '18 at 6:22
Of course after changing the input argument of the selector (tabInfo) it's triggering. But that's not how it should work, changes to the state should trigger it. My selector is not supposed to change
– An-droid
Nov 14 '18 at 8:42
add a comment |
My state is :
export interface RequestState
tabsContent: TabContent;
Where TabContent
represent an array of visual tabs containing 1 Request each and additionnal infos :
export interface TabContent
tabInfo: TabInfo;
request: Request;
results?: any;
I have this specialized selector to get one Request from a single TabContent :
export const getRequestForTabInfo = (tabInfo: TabInfo) => createSelector(
getTabContent,
(tabContent: TabContent) =>
const tabContentFiltered = tabContent.filter(tab =>
tab.tabInfo.id === tabInfo.id
&& tab.tabInfo.index === tabInfo.index
&& tab.tabInfo.state === tabInfo.state);
if (tabContentFiltered && tabContentFiltered.length === 1)
return tabContentFiltered[0].request;
return as Request;
,
);
and this basic one to get all TabsContent :
export const getTabContent = createSelector(
getRequestFeatureState,
state => state.tabsContent,
);
based on this FeatureSelector :
const getRequestFeatureState = createFeatureSelector<RequestState>('requests');
Defined in a facade service :
tabsContent$: Observable<TabContent>;
constructor(private store: Store<fromRequest.State>)
this.tabsContent$ = this.store.pipe(
select(fromRequest.getTabContent),
takeUntil(this.componentDestroy()),
);
public getRequest(tabInfo: TabInfo): Observable<Request>
return this.store.pipe(
select(fromRequest.getRequestForTabInfo(tabInfo)),
takeUntil(this.componentDestroy()),
);
and used in the component :
private initializeComponent(): void
this.requestFacade.getRequest(this.tabInfo).pipe(
takeUntil(this.componentDestroy()),
).subscribe(request =>
console.log('request : ', request);
this.request = request;
);
this.requestFacade.tabsContent$.pipe(
takeUntil(this.componentDestroy()),
).subscribe(tab =>
console.log('tab : ', tab);
);
When the component is consctructed I get both logs, but when I update part of the related state (I update the content of one Request) only the tab
log appear.
Why is the filtered selector observable not doing anything ?
javascript angular typescript rxjs ngrx
My state is :
export interface RequestState
tabsContent: TabContent;
Where TabContent
represent an array of visual tabs containing 1 Request each and additionnal infos :
export interface TabContent
tabInfo: TabInfo;
request: Request;
results?: any;
I have this specialized selector to get one Request from a single TabContent :
export const getRequestForTabInfo = (tabInfo: TabInfo) => createSelector(
getTabContent,
(tabContent: TabContent) =>
const tabContentFiltered = tabContent.filter(tab =>
tab.tabInfo.id === tabInfo.id
&& tab.tabInfo.index === tabInfo.index
&& tab.tabInfo.state === tabInfo.state);
if (tabContentFiltered && tabContentFiltered.length === 1)
return tabContentFiltered[0].request;
return as Request;
,
);
and this basic one to get all TabsContent :
export const getTabContent = createSelector(
getRequestFeatureState,
state => state.tabsContent,
);
based on this FeatureSelector :
const getRequestFeatureState = createFeatureSelector<RequestState>('requests');
Defined in a facade service :
tabsContent$: Observable<TabContent>;
constructor(private store: Store<fromRequest.State>)
this.tabsContent$ = this.store.pipe(
select(fromRequest.getTabContent),
takeUntil(this.componentDestroy()),
);
public getRequest(tabInfo: TabInfo): Observable<Request>
return this.store.pipe(
select(fromRequest.getRequestForTabInfo(tabInfo)),
takeUntil(this.componentDestroy()),
);
and used in the component :
private initializeComponent(): void
this.requestFacade.getRequest(this.tabInfo).pipe(
takeUntil(this.componentDestroy()),
).subscribe(request =>
console.log('request : ', request);
this.request = request;
);
this.requestFacade.tabsContent$.pipe(
takeUntil(this.componentDestroy()),
).subscribe(tab =>
console.log('tab : ', tab);
);
When the component is consctructed I get both logs, but when I update part of the related state (I update the content of one Request) only the tab
log appear.
Why is the filtered selector observable not doing anything ?
javascript angular typescript rxjs ngrx
javascript angular typescript rxjs ngrx
asked Nov 13 '18 at 13:51
An-droidAn-droid
3,45452859
3,45452859
Because your input argument(tabInfo) hasn't changed, so it is not emitting any new value. Try changing the input argument after updating a relevant part of the state and check whether its working.
– KiraAG
Nov 14 '18 at 6:22
Of course after changing the input argument of the selector (tabInfo) it's triggering. But that's not how it should work, changes to the state should trigger it. My selector is not supposed to change
– An-droid
Nov 14 '18 at 8:42
add a comment |
Because your input argument(tabInfo) hasn't changed, so it is not emitting any new value. Try changing the input argument after updating a relevant part of the state and check whether its working.
– KiraAG
Nov 14 '18 at 6:22
Of course after changing the input argument of the selector (tabInfo) it's triggering. But that's not how it should work, changes to the state should trigger it. My selector is not supposed to change
– An-droid
Nov 14 '18 at 8:42
Because your input argument(tabInfo) hasn't changed, so it is not emitting any new value. Try changing the input argument after updating a relevant part of the state and check whether its working.
– KiraAG
Nov 14 '18 at 6:22
Because your input argument(tabInfo) hasn't changed, so it is not emitting any new value. Try changing the input argument after updating a relevant part of the state and check whether its working.
– KiraAG
Nov 14 '18 at 6:22
Of course after changing the input argument of the selector (tabInfo) it's triggering. But that's not how it should work, changes to the state should trigger it. My selector is not supposed to change
– An-droid
Nov 14 '18 at 8:42
Of course after changing the input argument of the selector (tabInfo) it's triggering. But that's not how it should work, changes to the state should trigger it. My selector is not supposed to change
– An-droid
Nov 14 '18 at 8:42
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53282535%2fngrx-selector-not-triggering-updates%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53282535%2fngrx-selector-not-triggering-updates%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Because your input argument(tabInfo) hasn't changed, so it is not emitting any new value. Try changing the input argument after updating a relevant part of the state and check whether its working.
– KiraAG
Nov 14 '18 at 6:22
Of course after changing the input argument of the selector (tabInfo) it's triggering. But that's not how it should work, changes to the state should trigger it. My selector is not supposed to change
– An-droid
Nov 14 '18 at 8:42