React-admin 使用打字稿编辑标题缺失记录
React-admin Edit title missing record with typescript
为了使用 react-admin 下的 Typescript 功能,我按照 this official example 输入编辑标题:
interface UserTitleProps {
record: UserRecord;
}
const UserTitle: FC<UserTitleProps> = ({ record }) => {
const identifier = record?.email || record?.phoneNumber;
if (record?.name) {
return `${record?.name} (${identifier})`;
}
return identifier;
};
export const UserEdit: FC<EditProps> = (props) => (
<Edit
title={<UserTitle />}
{...props}
>
<UserForm />
</Edit>
);
但是上面的代码给了我以下打字稿错误:
Property 'record' is missing in type '{}' but required in type 'UserTitleProps'. TS2741
103 | export const UserEdit: FC<EditProps> = (props) => (
104 | <Edit
> 105 | title={<UserTitle />}
| ^
106 | {...props}
107 | >
108 | <UserForm />
的确,record
props 并没有真正通过,但是根据 documentation 和下面的示例,没有什么可以添加的。
我是不是漏掉了什么?
谢谢
如果你仔细检查过这个:
interface UserTitleProps {
record?: UserRecord; // make this an optional property
}
您会注意到 record
是可选的 属性 但在您的代码中它是强制性的。
因此对于您的情况,您需要传递 record
prop.
但如果您更新该行,使 prop 可选,那么 TypeScript
应该停止抱怨,除非另有原因。
React-admin says that when you pass an element as title
, it's cloned.
And from within <EditView>
, the current record is injected to the title
.
因此,您永远不必显式传递 record
属性。
因此 record
在添加到界面时应该始终是一个“可选”道具,因为您不必直接传递它。
In this video,如果你对细节感兴趣,你可以看看下面发生了什么。
export const UserEdit: FC<EditProps> = (props) => {
return (
<Edit
title={<UserTitle />} // "record" prop is never passed explicitly
{...props}
>
<UserForm />
</Edit>
);
};
这段代码帮我解决了这个问题。我的代码示例有效:
const EditTitle = ( record : any ) => {
return <span>Change feed state of {record.record ? `${record.record.feed}` : ''}</span>;
};
调试打印后,我发现record其实是一个对象,里面包含了record 属性 和我需要的字段。我也用TS
为了使用 react-admin 下的 Typescript 功能,我按照 this official example 输入编辑标题:
interface UserTitleProps {
record: UserRecord;
}
const UserTitle: FC<UserTitleProps> = ({ record }) => {
const identifier = record?.email || record?.phoneNumber;
if (record?.name) {
return `${record?.name} (${identifier})`;
}
return identifier;
};
export const UserEdit: FC<EditProps> = (props) => (
<Edit
title={<UserTitle />}
{...props}
>
<UserForm />
</Edit>
);
但是上面的代码给了我以下打字稿错误:
Property 'record' is missing in type '{}' but required in type 'UserTitleProps'. TS2741
103 | export const UserEdit: FC<EditProps> = (props) => (
104 | <Edit
> 105 | title={<UserTitle />}
| ^
106 | {...props}
107 | >
108 | <UserForm />
的确,record
props 并没有真正通过,但是根据 documentation 和下面的示例,没有什么可以添加的。
我是不是漏掉了什么?
谢谢
如果你仔细检查过这个:
interface UserTitleProps {
record?: UserRecord; // make this an optional property
}
您会注意到 record
是可选的 属性 但在您的代码中它是强制性的。
因此对于您的情况,您需要传递 record
prop.
但如果您更新该行,使 prop 可选,那么 TypeScript
应该停止抱怨,除非另有原因。
React-admin says that when you pass an element as
title
, it's cloned.
And from within<EditView>
, the current record is injected to thetitle
.
因此,您永远不必显式传递 record
属性。
因此 record
在添加到界面时应该始终是一个“可选”道具,因为您不必直接传递它。
In this video,如果你对细节感兴趣,你可以看看下面发生了什么。
export const UserEdit: FC<EditProps> = (props) => {
return (
<Edit
title={<UserTitle />} // "record" prop is never passed explicitly
{...props}
>
<UserForm />
</Edit>
);
};
这段代码帮我解决了这个问题。我的代码示例有效:
const EditTitle = ( record : any ) => {
return <span>Change feed state of {record.record ? `${record.record.feed}` : ''}</span>;
};
调试打印后,我发现record其实是一个对象,里面包含了record 属性 和我需要的字段。我也用TS