具有自定义内容语义的可重复使用侧边栏 UI
Re-usable sidebar with custom content Semantic UI
我有一个基本的 <Sidebar />
来自语义 ui 的反应。我希望能够跨多个页面重用此组件 -- 在大多数情况下传递不同的内容。
这是可重复使用的边栏组件
const SidebarExample = () => {
const [visible, setVisible] = useState({ name: "visible" });
return (
<Sidebar.Pushable as={Segment}>
<Sidebar
as={Menu}
animation="push"
icon="labeled"
inverted
onHide={() => setVisible(false)}
vertical
visible={visible}
width="thin"
>
<Menu.Item as="a">
<Icon name="home" />
Home
</Menu.Item>
<Menu.Item as="a">
<Icon name="gamepad" />
Games
</Menu.Item>
<Menu.Item as="a">
<Icon name="camera" />
Channels
</Menu.Item>
</Sidebar>
<Sidebar.Pusher>
<Segment>
<Header as="h3">Application Content</Header>
<Image src="https://react.semantic-ui.com/images/wireframe/paragraph.png" />
<Image src="https://react.semantic-ui.com/images/wireframe/paragraph.png" />
<Image src="https://react.semantic-ui.com/images/wireframe/paragraph.png" />
<Image src="https://react.semantic-ui.com/images/wireframe/paragraph.png" />
</Segment>
</Sidebar.Pusher>
</Sidebar.Pushable>
);
};
我的问题是如何将自定义内容传递给 <Sidebar.Pusher>
?
假设我有一个仪表板组件,我在其中导入了这个侧边栏。我不应该做这样的事情吗?
const blah = props => {
return (
<div>
<h1> custom content </h1>
</div>
);
};
const Dashboard = props => {
return (
<>
<div>
<h1> Dashboard </h1>
<SidebarExample content={blah} />;
</div>
</>
);
};
我有一个codesandbox here
您可以使用 children
属性将子元素直接传递到它们的输出中
Sidebar.js
return (
<Sidebar.Pushable as={Segment}>
<Sidebar
as={Menu}
animation="push"
icon="labeled"
inverted
onHide={() => setVisible(false)}
vertical
visible={visible}
width="thin"
>
<Menu.Item as="a">
<Icon name="home" />
Home
</Menu.Item>
<Menu.Item as="a">
<Icon name="gamepad" />
Games
</Menu.Item>
<Menu.Item as="a">
<Icon name="camera" />
Channels
</Menu.Item>
</Sidebar>
<Sidebar.Pusher>
<Segment>
<Header as="h3">Application Content</Header>
<Image src="https://react.semantic-ui.com/images/wireframe/paragraph.png" />
<Image src="https://react.semantic-ui.com/images/wireframe/paragraph.png" />
<Image src="https://react.semantic-ui.com/images/wireframe/paragraph.png" />
<Image src="https://react.semantic-ui.com/images/wireframe/paragraph.png" />
{props.children} // show children
</Segment>
</Sidebar.Pusher>
</Sidebar.Pushable>
);
并像这样在您的组件中传递您的内容
const blah = props => {
return (
<div>
<h1> custom content </h1>
</div>
);
};
const Dashboard = props => {
return (
<>
<div>
<h1> Dashboard </h1>
<SidebarExample>
{blah()} // add jsx here
</SidebarExample>
</div>
</>
);
};
试试这个 demo
因为 blah 是功能组件,您可以将其作为子组件传递
<SidebarExample><Blah/></SidebarExample>;
const Blah = props => { // make sure to name it as capital letter
return (
<div>
<h1> custom content </h1>
</div>
);
};
并在 SideBarExample 中将其命名为
<Sidebar.Pusher>
{props.children}
</Sidebar.Pusher>
解决方案 2:
你也可以按照你现在的方式去做,你可以将 blah 作为 prop 传递,然后通过调用它作为函数来渲染它
<Sidebar.Pusher>
{props.content()} // since blah is a function
</Sidebar.Pusher>
我有一个基本的 <Sidebar />
来自语义 ui 的反应。我希望能够跨多个页面重用此组件 -- 在大多数情况下传递不同的内容。
这是可重复使用的边栏组件
const SidebarExample = () => {
const [visible, setVisible] = useState({ name: "visible" });
return (
<Sidebar.Pushable as={Segment}>
<Sidebar
as={Menu}
animation="push"
icon="labeled"
inverted
onHide={() => setVisible(false)}
vertical
visible={visible}
width="thin"
>
<Menu.Item as="a">
<Icon name="home" />
Home
</Menu.Item>
<Menu.Item as="a">
<Icon name="gamepad" />
Games
</Menu.Item>
<Menu.Item as="a">
<Icon name="camera" />
Channels
</Menu.Item>
</Sidebar>
<Sidebar.Pusher>
<Segment>
<Header as="h3">Application Content</Header>
<Image src="https://react.semantic-ui.com/images/wireframe/paragraph.png" />
<Image src="https://react.semantic-ui.com/images/wireframe/paragraph.png" />
<Image src="https://react.semantic-ui.com/images/wireframe/paragraph.png" />
<Image src="https://react.semantic-ui.com/images/wireframe/paragraph.png" />
</Segment>
</Sidebar.Pusher>
</Sidebar.Pushable>
);
};
我的问题是如何将自定义内容传递给 <Sidebar.Pusher>
?
假设我有一个仪表板组件,我在其中导入了这个侧边栏。我不应该做这样的事情吗?
const blah = props => {
return (
<div>
<h1> custom content </h1>
</div>
);
};
const Dashboard = props => {
return (
<>
<div>
<h1> Dashboard </h1>
<SidebarExample content={blah} />;
</div>
</>
);
};
我有一个codesandbox here
您可以使用 children
属性将子元素直接传递到它们的输出中
Sidebar.js
return (
<Sidebar.Pushable as={Segment}>
<Sidebar
as={Menu}
animation="push"
icon="labeled"
inverted
onHide={() => setVisible(false)}
vertical
visible={visible}
width="thin"
>
<Menu.Item as="a">
<Icon name="home" />
Home
</Menu.Item>
<Menu.Item as="a">
<Icon name="gamepad" />
Games
</Menu.Item>
<Menu.Item as="a">
<Icon name="camera" />
Channels
</Menu.Item>
</Sidebar>
<Sidebar.Pusher>
<Segment>
<Header as="h3">Application Content</Header>
<Image src="https://react.semantic-ui.com/images/wireframe/paragraph.png" />
<Image src="https://react.semantic-ui.com/images/wireframe/paragraph.png" />
<Image src="https://react.semantic-ui.com/images/wireframe/paragraph.png" />
<Image src="https://react.semantic-ui.com/images/wireframe/paragraph.png" />
{props.children} // show children
</Segment>
</Sidebar.Pusher>
</Sidebar.Pushable>
);
并像这样在您的组件中传递您的内容
const blah = props => {
return (
<div>
<h1> custom content </h1>
</div>
);
};
const Dashboard = props => {
return (
<>
<div>
<h1> Dashboard </h1>
<SidebarExample>
{blah()} // add jsx here
</SidebarExample>
</div>
</>
);
};
试试这个 demo
因为 blah 是功能组件,您可以将其作为子组件传递
<SidebarExample><Blah/></SidebarExample>;
const Blah = props => { // make sure to name it as capital letter
return (
<div>
<h1> custom content </h1>
</div>
);
};
并在 SideBarExample 中将其命名为
<Sidebar.Pusher>
{props.children}
</Sidebar.Pusher>
解决方案 2:
你也可以按照你现在的方式去做,你可以将 blah 作为 prop 传递,然后通过调用它作为函数来渲染它
<Sidebar.Pusher>
{props.content()} // since blah is a function
</Sidebar.Pusher>