-
Notifications
You must be signed in to change notification settings - Fork 584
FAQ (1.x only)
react-burger-menu uses Radium to manage its styles. To use the Link
component, you need to wrap it in Radium first, like this:
import React from 'react';
import { stack as Menu } from 'react-burger-menu';
import { Link } from 'react-router';
import Radium from 'radium';
let RadiumLink = Radium(Link);
export default React.createClass({
render() {
return (
<Menu>
<RadiumLink className="menu-item" to="/home">Home</RadiumLink>
<RadiumLink className="menu-item" to="/settings">Settings</RadiumLink>
<RadiumLink className="menu-item" to="/blablabla">Blablabla</RadiumLink>
</Menu>
);
}
});
I'm getting a Warning: React attempted to reuse markup in a container but the checksum was invalid
error.
When rendering this component on the server, you need to pass the user agent via the radiumConfig
prop so Radium knows which vendor prefixes to apply.
This is an example of how that would look using Express:
<Menu radiumConfig={{userAgent: req.headers['user-agent']}} />
Unlike the rest of your content, fixed elements need to be placed outside your page-wrap
element, so your layout structure will look something like this:
<div id="outer-container">
<header>I am a fixed header!</header>
<Menu pageWrapId={ "page-wrap" } outerContainerId={ "outer-container" } />
<main id="page-wrap">
.
.
.
</main>
</div>
A common use for this is a fixed header, but the same applies to any elements you want to remain fixed and positioned relative to the viewport.
This is due to react-burger-menu's dependency on Radium. Radium currently only works with native HTML elements. There are two ways to solve this issue:
-
You can wrap each custom component in Radium, as described here: https://github.com/negomi/react-burger-menu/wiki/FAQ#why-doesnt-the-link-component-from-react-router-work
-
The above solution could get annoying if you have a lot of custom components, so an alternative is to wrap each component in a plain
<span>
or<div>
instead:
import React from 'react';
import { slide as Menu } from 'react-burger-menu';
import { Link } from 'react-router';
// Custom components
import Icon from './Icon';
import TextInput from './TextInput';
export default React.createClass({
render() {
return (
<Menu customCrossIcon={<span><Icon name="times" /></span>}>
<div><TextInput placeholder='Type here...' /></div>
<div><Link to="/foo">Foo</Link></div>
</Menu>
);
}
});