2016-06-02 7 views
0

이 항목 목록이 있습니다. 각 항목을 클릭하면 state.ui.clickedItem이 클릭 된 항목 자체로 변경됩니다. 항목의 연결된 과제 레코드를 계산하고 싶습니다. > 같은 할당 불변의 배열 & & 결코 -redux reselect가 재 계산을 유지합니다.

사용자가 클릭 항목 A :

import { createSelector } from 'reselect'; 

export const getAssignments  = state => state.assignments 
export const getClickedLineItemId = state => state.ui.clickedItem.id 

export const makeClickedLineItemAssignment =() => { 

    return createSelector(
    [ 
     getAssignments,  //Line 3 
     getClickedLineItemId, //Line 4 
    ], 
    ( 
     assignments, 
     lineItemId 
    ) => { 
     console.log("should only show if the clicked item is clicked for the first time") 
     return assignments.filter(assignment => assignment.line_item_id === lineItemId) 
    } 
) 

} 

내가 메모 화는 행동하도록 가능하지 것이라고 생각 :

그래서 나는이 재 선택 선택이 항목 ID 앞에 표시 -> 항목 할당 및 console.log를 계산하십시오.

사용자 클릭 항목 B -> 위와 동일 사용자

> 같은 할당 배열 & & 항목 ID가 이전에 보지 - -

사용자는 항목 A (다시) 클릭 만, 그러나, 캐시와 내가 기대 무엇 NO CONSOLE.LOG

에서 잡아> 어떤 계산을 내가 get은 모든 클릭이 필터링 및 console.logging을 다시 계산한다는 것입니다. 누구든지 내 Reselect 코드에서 오류를 볼 수 있습니까?

감사합니다.

답변

0

makeClickedLineItemAssignment에 전화 할 때마다 선택기를 다시 만들 수있는 것처럼 보입니다. 그것은 상태를 받아들이는 함수를 반환하는 함수입니다. 따라서 다음과 같이 사용해야합니다.

const selector = makeClickedLineItemAssignment(); 
selector(state); 
selector(state); 

이렇게하면 셀렉터가 올바르게 메모됩니다. 그러나 상태가 mapStateToProps으로 바뀔 때마다 앱에서 makeClickedLineItemAssignment으로 전화하는 것이므로 매번 다른 기능을 사용하게됩니다. 대신 직접 선택을 수출하려고 :

export const makeClickedLineItemAssignment = createSelector(
    [ 
    getAssignments,  //Line 3 
    getClickedLineItemId, //Line 4 
    ], 
    (
    assignments, 
    lineItemId 
) => { 
    console.log("should only show if the clicked item is clicked for the first time") 
    return assignments.filter(assignment => assignment.line_item_id === lineItemId) 
    } 
); 

출력을 :

[email protected]:~/$ babel-node test.js 
First 
should only show if the clicked item is clicked for the first time 
Second