2016-02-29 31 views
7

Obecnie pracuję nad stroną, która wyświetla status określonego zestawu "zadań" dla określonego użytkownika. Aby pobrać dane, mam następujący kontener Przekaźnik:Przekaźnik - ustaw zmienną przed zapytaniem

export default Relay.createContainer(TaskReview, { 
    initialVariables: { 
    limit: Number.MAX_SAFE_INTEGER, 
    studentId: null, 
    }, 
    fragments: { 
    task:() => Relay.QL` 
     fragment on Task { 
     id, 
     title, 
     instruction, 
     end_date, 
     taskDataList(first: $limit, type: "subTasks", member: $studentId) { 
      edges { 
      node { 
       id, 
       answer, 
       completion_date, 
      } 
      } 
     }, 
     ... 

określić, które użytkownik chcę uzyskać dane z używam:

componentWillMount =() => { 
    let {relay} = this.props; 
    relay.setVariables({ 
    studentId: this.props.member.id 
    }); 
} 

jednak tutaj problemem jest to, że zapytanie jest najpierw wykonane z null, jak zdefiniowano w initialVariables. Moja implementacja backendu ma to, że jeśli studentId ma wartość NULL, to zwraca dane dla wszystkich członków.

Powoduje to, że powyższe zapytanie wykonuje się dwukrotnie, po raz pierwszy ze wszystkimi członkami, a drugie z podanym memberId.

To psuje się z innymi rzeczami w moim componentWillUpdate. Czy mimo to mogę przekazać tę zmienną i uzyskać tylko dane dla tego członka w pierwszym zapytaniu?

Dzięki.

Odpowiedz

2

Wypełnij swoją aplikację tymi warunkami początkowymi, przekazując zmienną w dół przez trasę.

class TaskReviewRoute extends Relay.Route { 
    static paramDefinitions = { 
    studentId: {required: true}, 
    }; 
    static queries = { 
    task:() => Relay.QL`query { ... }`, 
    }; 
    static routeName = 'TaskReviewRoute'; 
} 

<Relay.RootContainer 
    Container={TaskReview} 
    route={new TaskReviewRoute({studentId: '123'})} 
/> 
+1

Czy możesz wyjaśnić więcej na temat swojej odpowiedzi, w jaki sposób rozwiąże to problem PO? Przy początkowym załadowaniu identyfikator studentId będzie równy null, więc żądanie wysyła wartość pustą do zaplecza w celu pobrania danych. To powoduje problem. – lvarayut

+0

Jeśli przekazujesz 'studentId' do kontenera Przekaźnika przez trasę, tak jak opisałem powyżej, i _remove_ logikę' componentWillMount', wtedy 'studentId' będzie od początku wartością inną niż null. Pomyśl o 'initialVariables' jako symbolu zastępczym/domyślnym, jeśli wartość nie jest przekazywana z rodzica jako rekwizytów (np. Przez' Relay.RootContainer' ze względu na obecność opisanego powyżej parametru trasy). – steveluscher

+0

co zrobić, jeśli 'studentId' nie jest znane z góry i nie może zostać przekazane do inicjatora trasy? Mam sytuację, w której wartość jest przekazywana przez "parametry" routera, więc potrzebuję innego sposobu, aby to zrobić. – nburk