有没有办法在显示显示页面之前使用 if 语句?

Is there a way to use an if statement before showing the show page?

有没有办法在展示页面之前做一个if语句? 例如,如果我用显示按钮单击的元素的 id 以“.log”结尾,我希望显示页面如下所示:

export const reportShow = ({ ...props }) => (
<Show title="Log" {...props}>
    <SimpleShowLayout>
        <ReferenceManyField label="Log" reference="archivedfiles" target="id">
            <Datagrid>
                <TextField source="id" label="Line" />
                <TextField source="timestamp" label="Timestamp" />
                <TextField source="severity" label="Severity" />
                <TextField source="message" label="Message" />
            </Datagrid>
        </ReferenceManyField>
    </SimpleShowLayout>
</Show>);

但是如果 id 以 .txt 结尾,我希望显示页面显示一个报告页面,其中包含:

export const reportShow = ({ ...props }) => (
<Show title="Report" {...props}>
    <SimpleShowLayout>
                <TextField source="id" label="Report Name" />
                <TextField source="rmessage" label="Message" />
    </SimpleShowLayout>
</Show>);

解决这个问题的最佳方法是什么?

也许 aor-dependent-input 插件可以帮助您。

我最终通过这样做使它起作用:

export const archivedShow = ({ ...props }) => {
    if (props.match.params.id.endsWith("txt")){
    return (<Show title="Report" {...props}>
        <SimpleShowLayout>
            <ReferenceManyField label="Report" reference="archivedfiles" target="id">
                <Datagrid>
                    <FormattedReportView/>
                </Datagrid>
            </ReferenceManyField>
        </SimpleShowLayout>
    </Show>
    );
    }
    else {
        return (
        <Show title="Log" {...props} filters={< LogFilter/>}>
            <SimpleShowLayout>
            <ReferenceManyField label="Log" reference="archivedfiles" target="id">
                <Datagrid>
                    <TextField source="id" label="Line" />
                    <TextField source="timestamp" label="Timestamp" />
                    <TextField source="severity" label="Severity" />
                    <TextField source="message" label="Message" />
                </Datagrid>
            </ReferenceManyField>
        </SimpleShowLayout>
        </Show>
        );
    }
}