【问题标题】:react-admin: `data` is undefined in onSuccess() on <Edit> componentreact-admin: `data` 在 <Edit> 组件的 onSuccess() 中未定义
【发布时间】:2021-04-11 20:38:30
【问题描述】:

我正在尝试遵循 https://marmelab.com/react-admin/CreateEdit.html#onsuccess 中的示例。 我想在更新时用记录标题通知用户。

    const onSuccess = ({ data }) => {
        console.log(data) // output: undefined
        notify(`Changes to post "${data.title}" saved`)
        redirect('/posts');
        refresh();
    };

JS 总是抱怨undefined 没有title 属性。

根据文档,data 来自dataProvider.update() 的响应

onSuccess函数接收dataProvider调用的响应(dataProvider.create()或dataProvider.update())...

但是,根据我的测试,onSuccess() 在提交时立即被调用,dataProvider.update() 在 toast 消息消失时被调用,因此onSuccess() 没有收到dataProvider.update() 返回的 Promise 的结果。

我在示例中遗漏了什么?

其他信息

我正在使用react-admin v3.11.1 和 Chrome 87.0.4280.88 如果我从组件中删除 onSuccess(),记录会正确更新

【问题讨论】:

    标签: react-admin


    【解决方案1】:

    如果您在Edit 上下文中,则必须将undoable={false} 设置为Edit 组件,以防止不等待请求响应的乐观响应。

    <Edit
      {...props}
      onSuccess={onSuccess}
      undoable={false}
    >
        ...
    </Edit>
    

    参考:https://marmelab.com/react-admin/CreateEdit.html#undoable

    【讨论】:

    • 我确实想保留撤消选项。两者不兼容?
    • 不幸的是我不这么认为。我可能是错的,所以我建议你直接在 github 存储库上用一个最小的可复制示例询问,以便所有者可以正确回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    相关资源
    最近更新 更多