useGetOne响应不会重新呈现组件

时间:2020-03-31 11:32:09

标签: reactjs react-hooks react-admin

在这个简单的示例上,我感到很沮丧,因为要么我没有得到什么东西,要么它没有按我期望的方式工作,也没有按照文档中的要求进行工作。

因此,我尝试扩展CloneButton组件,以实际检索Datagrid每一行上的记录并将其传递给create组件:

import React from 'react';
import PropTypes from 'prop-types';
import { CloneButton, useGetOne } from 'react-admin';
import CircularProgress from '@material-ui/core/CircularProgress';

const CloneQueryButton = ({
    label = "Duplicate",
    basePath,
    record,
    ...props
}) => {

const { data, loading, error } = useGetOne(basePath, record.id);

if (loading) { return <CircularProgress />; }
if (error) { return <p>ERROR {error.message}</p>; }

if (data) {
    console.log("inside", data);
    data.name = `Copy of ${data.name}`;
}

console.log("outside", data);

return <CloneButton
    basePath={basePath}
    record={data}
    label={label}
    {...props} />
};

我在控制台上得到的只是outside null 同样,当按下按钮时,它会重定向到具有空record属性的创建页面。

我可以看到网络请求,并且它们都返回有效的json。我不明白为什么收到响应后,该组件就不会重新渲染。如果有人看到我想念的东西,我将非常感激!

1 个答案:

答案 0 :(得分:0)

控制台成功,这意味着既没有error也没有loading

检查implementation of useGetOne后,如果基本上没有在您的admin state中找到具有给定名称的资源,则它将返回null。

因此,我假设您没有在admin's state树(也就是<Resource name="your name" />树中的<Admin>中声明资源。

onst useGetOne = (
    resource: string,
    id: Identifier,
    options?: any
): UseGetOneHookValue =>
    useQueryWithStore(
        { type: 'getOne', resource, payload: { id } },
        options,
        (state: ReduxState) =>
            state.admin.resources[resource]
                ? state.admin.resources[resource].data[id]
                : null
    );