2017-08-11 40 views
0

我已經使用AOR文檔中描述的restClient'UPDATE'方法編寫了自定義操作。當動作被觸發時,我從restClient獲得回調中的更新記錄,以便相應地更新組件的狀態。如何將記錄更新從子組件傳播到父組件

但父組件(在我的情況下顯示視圖)呢?我如何更新記錄「自上而下」,以便所有AOR層次結構都能收到新的記錄道具?
這是父視圖:

<Show actions={<ProjectShowActions />} {...props}> 
     <SimpleShowLayout> 
      <TextField source="status"/> 
     </SimpleShowLayout> 
</Show> 

ProjectShowActions有一子組件ManageProjectButton:

const ProjectShowActions = ({ data }) => (
    <CardActions> 
     <ManageProjectButton record={data}/> 
    </CardActions> 
); 

ManageProjectButton觸發上記錄的 「狀態」 字段更新:

const updatedRecord = { ...record, status: 'off' }; 
restClient(UPDATE, 'projects', { id: record.id, data: updatedRecord }); 

然而Show組件中的「status」字段不會更新爲「off」,除非用戶刷新頁面或導航離開t他組成。

+0

[redux](http://redux.js.org/)設計模式可能會對您有所幫助。 – HyeonJunOh

+0

謝謝,這個問題是特定於admin-on-rest,它保留了一個內部實例資源池。如果我正確理解文檔,restClient應該更新此實例池,但更新是否自動反映在使用資源的組件的道具中?即還原模式被使用,但還有更多。 –

回答

0

AOR使用樂觀渲染。所以新記錄實際上在REST客戶端實際發射回調之前顯示。錯誤個案分開處理。

對Redux狀態的更新會導致更新訂閱該狀態字段的所有組件。沒有什麼需要手動完成。這就是Redux的工作原理。

+0

謝謝,但它不起作用。如果稍後有機會,我會添加一個代碼示例。我只是使用顯示視圖,我已經把它的道具指向記錄中的一個字段和一個按鈕的文本字段。當顯示視圖首先呈現文本字段時顯示正確的狀態。在onclick按鈕中,我調用其餘客戶端並更新記錄,但文本字段不更新,它仍顯示最初在Show視圖呈現時加載的舊記錄。 –

+0

很奇怪。請分享一些代碼。 –

+0

更新的問題與演示問題的代碼示例。 –

1

使用自定義動作創建器與admin-on-rest的內置fetcher解決了這個問題。狀態更新現在傳播到父視圖。

+0

有點晚了,但演示應用程序中實際存在一個很好的示例,它使用自定義動作和自定義傳奇: https://github.com/marmelab/admin-on-rest-demo/blob/master/src /評論/。 請參閱'ApproveButton','AcceptButton'和'RejectButton'組件。 – Gildas

相關問題