Маршрут
позволяет передавать пользовательские реквизиты компоненту, используя реквизит render
вместо реквизита component
.Вы передаете функцию в render
реквизит, и эта функция будет вызываться с теми же реквизитами, которые обычно автоматически передаются при использовании component
.Затем вы можете делать с этими реквизитами все, что захотите
Пример этого (не включая ваш компонент mainLayout) будет выглядеть так:
<Route render={(routeProps) => (
<PubsList hello="world" {...routeProps} />
)}/>
Таким образом, вы можете использовать произвольныйреквизит на компоненты.Но тогда как позволить MainLayout диктовать, что это за дополнительные реквизиты?Там я думаю, что вам нужно изменить MainLayout, чтобы иметь собственную опору рендеринга.
render() {
let children = null;
if (this.props.render) {
children = this.props.render({ foo: this.state.foo })
}
return (
<div className="container" >
<Menu inverted color='teal' fixed="top" style={{ margin: "0", padding: "20px", borderRadius: "0", display: "block" }}>
<Link to="/">
<Header as='h2' content='PandaBar' floated="left" style={{ color: "white", margin: "0" }} />
</Link>
</Menu>
<div className="content" style={{ marginTop: "70px", overflow: "hidden" }} >
{children}
</div>
</div>
);
}
И вы бы использовали это так:
<MainLayout render={(layoutProps) => (
<React.Fragment>
<Route exact path="/" render={(routeProps) =>
<PubsList {...layoutProps} {...routeProps} />
}/>
<Route exact path="/add-pub" render={(routeProps) =>
<AddPub {...layoutProps} {...routeProps} />
}/>
<Route exact path="/add-pub/:id" render={(routeProps) =>
<AddPub {...layoutProps} {...routeProps} />
}/>
</React.Fragment>
)} />