在react-admin中为视图定义可重用模板

时间:2019-01-31 13:57:35

标签: javascript reactjs react-admin

使用react-admin,我有一个EditView,如下所示:

export const LanguageEdit = props => (
  <Edit title="Edit: Language" {...props}>
    <SimpleForm>
      <TextInput source="name" label="Name" />
      <TextInput source="iso1" label="ISO-1" />
      <TextInput source="iso2" label="ISO-2" />
    </SimpleForm>
  </Edit>
);

我的应用程序将具有多个这样的编辑视图,每个视图在<SimpleForm>元素中具有不同的内容。但是标题在不同的视图中只会稍有不同。

<Edit title="Edit: Language" {...props}>
<Edit title="Edit: City" {...props}>
<Edit title="Edit: Country" {...props}>

是否有某种方法可以将其定义为“模板”,然后将其用于所有编辑视图?

模板

<Edit title="Edit: ${currentViewName}" {...props}>
  <SimpleForm>
    ${somePlaceholder}
  </SimpleForm>
</Edit>

查看内容(伪代码)

currentViewName = "Country";
somePlaceholder => (
          <TextInput source="name" label="Name" />
          <TextInput source="iso1" label="ISO-1" />
          <TextInput source="iso2" label="ISO-2" />
);
applyTemplate(currentViewName, somePlaceholder);

1 个答案:

答案 0 :(得分:3)

您可以像这样包装Edit组件:

const EditTemplate = ({ title, children, ...props }) => (
    <Edit title={`Edit: ${title}`} {...props}>
        <SimpleForm>
            {children}
        </SimpleForm>
    </Edit>
)

并将其用作普通的“编辑”视图:

export const LanguageEdit = props => (
  <EditTemplate title="Language" {...props}>
      <TextInput source="name" label="Name" />
      <TextInput source="iso1" label="ISO-1" />
      <TextInput source="iso2" label="ISO-2" />
  </EditTemplate>
);