I have a react-admin app to manage users. Now I need to access some props in the custom header (appBar) that I created, but can't figure out how to get those accessible there.
Here some of the code.
Main.js
class Main extends React.Component
{
render()
{
// const { } = this.state;
const { t } = this.props;
const _this = this;
return (
<Admin dataProvider={dataProvider} {..._this.props.props} layout={CustomLayout}>
<Resource name="users"
list={<UserList {..._this.props.props} />}
edit={<UserEdit {..._this.props.props} />}
create={<UserCreate {..._this.props.props} />}
/>
</Admin>
);
}
}
export default Main;
From above code CustomLayout
const CustomLayout = (props) => <Layout
{...props}
appBar={Header}
sidebar={Sidebar}
/>;
export default CustomLayout;
From above code Header
class Header extends React.Component {
// ---> Lifecycle functions <---
constructor(props)
{
super(props);
// Here I need to access props...
this.selectCustomer = this.selectCustomer.bind(this);
this.state = {
selectedCustomerId: this.props.selectedCustomerId,
};
}
return (
<div>...</div>
);
}
}
export default Header;
How do I get props from Main -> CustomLayout -> Header? If in CustomLayout.js I change appBar={Header} to appBar={<Header {...props} />}, I get Uncaught Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: object.
I guess it needs to be the component-name. Is there any way to achieve this?
The preferred way here would be to use React functional components instead of classes and React.createContext() / React.useContext().