2016-02-29 11 views
7

Tôi hiện đang làm việc trên trang hiển thị trạng thái của một tập hợp "nhiệm vụ" nhất định cho một người dùng cụ thể. Để lấy dữ liệu, tôi có container Rơ le sau:Tiếp sức - đặt biến trước truy vấn

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, 
      } 
      } 
     }, 
     ... 

Để xác định người sử dụng tôi muốn lấy dữ liệu từ, tôi sử dụng:

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

Tuy nhiên, vấn đề ở đây là truy vấn là được thực hiện lần đầu tiên với null như được định nghĩa trong initialVariables. Việc triển khai backend của tôi có nó để nếu studentId là NULL, thì nó trả về dữ liệu cho tất cả các thành viên.

Kết quả là truy vấn trên thực thi hai lần, lần đầu tiên với tất cả thành viên và lần thứ hai với memberId nhất định.

Điều này gây rối với những thứ khác trong số componentWillUpdate của tôi. Có anyway tôi có thể vượt qua biến này và chỉ nhận được dữ liệu cho thành viên đó trên truy vấn đầu tiên?

Cảm ơn.

Trả lời

2

Làm thủ tục ứng dụng của bạn với những điều kiện ban đầu này bằng cách chuyển biến của bạn qua tuyến đường.

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

Bạn có thể giải thích thêm về câu trả lời của mình không, cách này sẽ giải quyết vấn đề của OP như thế nào? Tại tải ban đầu, studentId sẽ rỗng, vì vậy, yêu cầu sẽ gửi giá trị null đến back-end để tìm nạp dữ liệu. Điều đó gây ra vấn đề. – lvarayut

+0

Nếu bạn chuyển 'studentId' vào vùng chứa Relay thông qua tuyến đường như tôi đã mô tả ở trên, và _remove_ logic' componentWillMount', thì 'studentId' sẽ không null từ đầu. Hãy suy nghĩ của 'initialVariables' như một giữ chỗ/mặc định trong trường hợp một giá trị không được truyền xuống từ cha mẹ làm đạo cụ (ví dụ:' Relay.RootContainer' do sự hiện diện của param tuyến được mô tả ở trên). – steveluscher

+0

điều gì sẽ xảy ra nếu 'studentId' không biết trước và không thể được chuyển tới bộ khởi tạo của tuyến đường? Tôi có một tình huống mà một giá trị được chuyển qua 'params' của router vì vậy tôi cần một cách khác để làm điều này – nburk

Các vấn đề liên quan