Renders a component with collapsible content.
- Use the
React.setState()
hook to create theisCollapsed
state variable with an initial value ofprops.collapsed
. - Use an object,
style
, to hold the styles for individual components and their states. - Use a
<div>
to wrap both the<button>
that alters the component’sisCollapsed
state and the content of the component, passed down viaprops.children
. - Determine the appearance of the content, based on
isCollapsed
and apply the appropriate CSS rules from thestyle
object. - Finally, update the value of the
aria-expanded
attribute based onisCollapsed
to make the component accessible.
代码实现
function Collapse(props) {
const [isCollapsed, setIsCollapsed] = React.useState(props.collapsed);
const style = {
collapsed: {
display: 'none'
},
expanded: {
display: 'block'
},
buttonStyle: {
display: 'block',
width: '100%'
}
};
return (
<div>
<button style={style.buttonStyle} onClick={() => setIsCollapsed(!isCollapsed)}>
{isCollapsed ? 'Show' : 'Hide'} content
</button>
<div
className="collapse-content"
style={isCollapsed ? style.collapsed : style.expanded}
aria-expanded={isCollapsed}
>
{props.children}
</div>
</div>
);
}
使用样例
ReactDOM.render(
<Collapse>
<h1>This is a collapse</h1>
<p>Hello world!</p>
</Collapse>,
document.getElementById('root')
);