如何在 react-admin 资源中的 2 个列表组件之间共享实例
How to share an instance between 2 List components in a react-admin Resource
这就是在 react-admin 中实例化组件的方式,但现在我需要在 PostList 和 UserList 之间共享通知实例。我想避免单身人士。是否可以通过某种方式将 'notifications' 对象传递给列表?
import React from 'react';
import PostIcon from '@material-ui/icons/Book';
import UserIcon from '@material-ui/icons/People';
import { Admin, Resource } from 'react-admin';
import jsonServerProvider from 'ra-data-json-server';
import { PostList } from './posts';
import { UserList } from './users';
import { Notifications } from './notifications';
var notifications = new Notifications();
const App = () => (
<Admin dataProvider={jsonServerProvider('https://jsonplaceholder.typicode.com')}>
<Resource name="posts" list={PostList} icon={PostIcon} />
<Resource name="users" list={UserList} icon={UserIcon} />
</Admin>
);
提前致谢。
在我看来,一切都很好地实施了:
https://marmelab.com/react-admin/Theming.html#notifications
import { Layout } from 'react-admin';
import MyNotification from './MyNotification';
const MyLayout = (props) => <Layout {...props} notification={MyNotification} />;
const App = () => (
<Admin layout={MyLayout} dataProvider={simpleRestProvider('http://path.to.my.api')}>
// ...
</Admin>
);
将自定义道具传递给 <Resource>
组件对我来说不太有效,因此在尝试了几种不同的方法后,这是满足我要求的方法。
因此,有一个默认道具,您可以将其传递给名为 options
的 <Resource>
组件,它接受一个对象。通常,当您想将 label
拉入您的资源时,您会看到使用此道具。想法是自定义这个对象-
// In App.js
<Admin dataProvider={jsonServerProvider('https://jsonplaceholder.typicode.com')}>
<Resource name="posts" list={PostList} icon={PostIcon} options={{ "label": "Posts", "notifications": notifications }} />
<Resource name="users" list={UserList} icon={UserIcon} options={{ "label": "Users", "notifications": notifications }} />
</Admin>
然后在您的资源中访问它,例如 -
// In Posts.js
export const PostList = (props) => {
const { notifications, label } = props.options;
// You have your notifications object here now
return (
<List
{...props}
title={label}
bulkActionButtons={false}
exporter={false}>
<Datagrid>
<DateField showTime={true} sortable={true} source="created_on" label="Timestamp" />
</Datagrid>
</List>
);
};
如果这对你有用,请告诉我!
这就是在 react-admin 中实例化组件的方式,但现在我需要在 PostList 和 UserList 之间共享通知实例。我想避免单身人士。是否可以通过某种方式将 'notifications' 对象传递给列表?
import React from 'react';
import PostIcon from '@material-ui/icons/Book';
import UserIcon from '@material-ui/icons/People';
import { Admin, Resource } from 'react-admin';
import jsonServerProvider from 'ra-data-json-server';
import { PostList } from './posts';
import { UserList } from './users';
import { Notifications } from './notifications';
var notifications = new Notifications();
const App = () => (
<Admin dataProvider={jsonServerProvider('https://jsonplaceholder.typicode.com')}>
<Resource name="posts" list={PostList} icon={PostIcon} />
<Resource name="users" list={UserList} icon={UserIcon} />
</Admin>
);
提前致谢。
在我看来,一切都很好地实施了: https://marmelab.com/react-admin/Theming.html#notifications
import { Layout } from 'react-admin';
import MyNotification from './MyNotification';
const MyLayout = (props) => <Layout {...props} notification={MyNotification} />;
const App = () => (
<Admin layout={MyLayout} dataProvider={simpleRestProvider('http://path.to.my.api')}>
// ...
</Admin>
);
将自定义道具传递给 <Resource>
组件对我来说不太有效,因此在尝试了几种不同的方法后,这是满足我要求的方法。
因此,有一个默认道具,您可以将其传递给名为 options
的 <Resource>
组件,它接受一个对象。通常,当您想将 label
拉入您的资源时,您会看到使用此道具。想法是自定义这个对象-
// In App.js
<Admin dataProvider={jsonServerProvider('https://jsonplaceholder.typicode.com')}>
<Resource name="posts" list={PostList} icon={PostIcon} options={{ "label": "Posts", "notifications": notifications }} />
<Resource name="users" list={UserList} icon={UserIcon} options={{ "label": "Users", "notifications": notifications }} />
</Admin>
然后在您的资源中访问它,例如 -
// In Posts.js
export const PostList = (props) => {
const { notifications, label } = props.options;
// You have your notifications object here now
return (
<List
{...props}
title={label}
bulkActionButtons={false}
exporter={false}>
<Datagrid>
<DateField showTime={true} sortable={true} source="created_on" label="Timestamp" />
</Datagrid>
</List>
);
};
如果这对你有用,请告诉我!