2017-04-03 26 views
1

我創建一個顯示一些職位聯繫-ON-休息 - ReferenceField進行多次查詢,而不是重複數據刪除查詢,寫在文件

代碼如下

export const EditorView = (props) => { 
    return (
    <List {...props} title="Fresh Tales"> 
     <Datagrid> 
     <TextField source="id" /> 
     <TextField source="text" /> 
     <ReferenceField label="Writer" source="writerId" reference="writers"> 
      <TextField source="name" /> 
     </ReferenceField> 
     </Datagrid> 
    </List> 
) 
} 

該文檔以供參考場here編輯場

建議referenceField在每個查詢的模擬API上看到的查詢都去重複API查詢。這裏有兩個問題給我。

1)每個查詢都正在取得兩次 - 一次與選項和一次用GET

2)ReferenceField每一個作家的資源正在由單一的查詢作家牽強。

OPTIONS /tales?_sort=ID&_order=ASC&_start=0&_end=10 204 0.168 ms - - 
GET /tales?_sort=ID&_order=ASC&_start=0&_end=10 304 2.130 ms - - 
OPTIONS /writers/312 204 0.148 ms - - 
OPTIONS /writers/314 204 0.153 ms - - 
OPTIONS /writers/316 204 0.190 ms - - 
OPTIONS /writers/318 204 0.226 ms - - 
OPTIONS /writers/320 204 0.116 ms - - 
OPTIONS /writers/322 204 0.118 ms - - 
OPTIONS /writers/324 204 0.142 ms - - 
OPTIONS /writers/330 204 0.135 ms - - 
OPTIONS /writers/340 204 0.122 ms - - 
OPTIONS /writers/350 204 0.129 ms - - 
GET /writers/312 304 1.769 ms - - 
GET /writers/314 304 0.884 ms - - 
GET /writers/316 304 4.023 ms - - 
GET /writers/318 304 2.928 ms - - 
GET /writers/320 304 0.759 ms - - 
GET /writers/322 304 1.126 ms - - 
GET /writers/324 304 1.040 ms - - 
GET /writers/330 304 1.687 ms - - 
GET /writers/340 304 0.653 ms - - 
GET /writers/350 304 0.771 ms - - 

這似乎相當沉重和浪費。將每個作者加載到視圖上是一個新請求。無法弄清楚我是錯的還是文檔是。

回答

0

您看到OPTIONSGET請求的事實是CORS(跨源資源共享 - google該術語)的影響,如果您的API和管理員不在同一個域中,這是正常的。

至於如果您的API支持將所有調用分組爲一個,那麼您的責任是在您的restClient中執行此操作。

您可能正在使用自定義REST客戶端,或者jsonServerRestClient,它不支持此選項。

舉例來說,這裏是它是如何做in the simpleRestClient

case GET_MANY: { 
     const query = { 
      filter: JSON.stringify({ id: params.ids }), 
     }; 
     url = `${apiUrl}/${resource}?${queryParameters(query)}`; 
     break; 
    } 
+0

非常感謝您抽出寶貴時間來回答。我一直在使用重複查詢的jsonServerRestClient。進入代碼,他們明確表示他們的模擬服務不支持GET_MANY –