2017-08-11 43 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

相关问题