Patrón "Slots"
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
const UserAvatar = ({ user, size }) => (
<img
className={`user-avatar ${size || ''}`}
alt="user avatar"
src={user.avatar}
/>
);
const UserStats = ({ user }) => (
<div className="user-stats" >
<div>
<UserAvatar user={user} />
{user.name}
</div>
<div className="stats" >
<div> {user.followers} Followers </div>
<div> Following {user.following} </div>
</div>
</div>
);
// Aceptar children y renderizarlos
const Nav = ({ children }) => (
<div className="nav" > {children} </div>
);
const Content = () => (
<div className="content" > main content here </div>
);
// Aceptar children y renderizarlos
const Sidebar = ({ children }) => (
<div className="sidebar" > {children} </div>
);
// Body necesita una barra lateral y contenido, pero
// escrito de esta manera, pueden ser CUALQUIER COSA
const Body = ({ sidebar, content }) => (
<div className="body" >
<Sidebar> {sidebar} </Sidebar>
{content}
</div>
);
class App extends React.Component {
state = {
user: {
avatar: 'https://www.gravatar.com/avatar/763dcd4dad38689d57aa9d83a60bfaa5',
name: 'Zero',
followers: 1234,
following: 123
}
};
render() {
const { user } = this.state;
return (
<div className="app" >
<Nav>
<UserAvatar user={user} size="small" />
</Nav>
<Body
sidebar={ <UserStats user={user} /> }
content={ <Content /> }
/>
</div>
);
}
}
ReactDOM.render(
<App />,
document.querySelector('#root')
);Última actualización