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.
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
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
đ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