Skip to content

Instantly share code, notes, and snippets.

@DZuz14
DZuz14 / Accordion.js
Created July 17, 2020 19:32
Accordion with Expanded And Collapsed
import React from 'react'
import Collapsed from './Collapsed'
import Expanded from './Expanded'
const Accordion = ({ children }) => {
return <div>{children}</div>
}
Accordion.Collapsed = Collapsed
Accordion.Expanded = Expanded
@DZuz14
DZuz14 / items.js
Created July 17, 2020 19:34
Accordion mock data
const items = [
{
summary: 'Basketball shoes',
detail: 'Never worn, but owned by the GOAT, Michael Jordan himself.'
},
{
summary: 'Tennis racket',
detail: 'Not in too bad of shape.'
},
{
@DZuz14
DZuz14 / index.js
Created July 17, 2020 19:36
Map through items 1
<Accordion>
{items.map(({ summary, detail }) => (
<Accordion.Item key={summary}>
<Accordion.Collapsed>{summary}</Accordion.Collapsed>
<Accordion.Expanded>{detail}</Accordion.Expanded>
</Accordion.Item>
))}
</Accordion>
@DZuz14
DZuz14 / index.js
Created July 17, 2020 19:37
Map through items 2
<Accordion>
{items.map(({ summary, detail }) => (
<Accordion.Item key={summary}>
<Accordion.Collapsed id={summary}>
{summary}
</Accordion.Collapsed>
<Accordion.Expanded>{detail}</Accordion.Expanded>
</Accordion.Item>
))}
</Accordion>
@DZuz14
DZuz14 / Collapsed.js
Created July 17, 2020 19:38
Collapsed with id prop
import React from 'react'
const Collapsed = ({ children, id }) => (
<div style={styles} data-id={id}>
{children}
</div>
)
const styles = {
color: '#007bff', // blue
@DZuz14
DZuz14 / Accordion.js
Last active July 17, 2020 20:43
Accordion with state and function
import React, { useState } from 'react'
import Collapsed from './Collapsed'
import Expanded from './Expanded'
const Accordion = ({ children }) => {
const [open, setOpen] = useState('')
const handleOpen = (e) => {
const id = e.target.getAttribute('data-id')
id === open ? setOpen('') : setOpen(id)
@DZuz14
DZuz14 / Collapsed.js
Created July 17, 2020 19:40
Handle open addition to Collapsed
import React from 'react'
const Collapsed = ({ children, handleOpen, id }) => (
<div style={styles} onClick={handleOpen} data-id={id}>
{children}
</div>
)
const styles = {
color: '#007bff', // blue
@DZuz14
DZuz14 / Accordion.js
Last active July 17, 2020 19:46
Accordion with React Children Scaffold
const Accordion = ({ children }) => {
// const [open, setOpen] = useState('')
// const handleOpen = (e) => {
// const id = e.target.getAttribute('data-id')
// id === open ? setOpen('') : setOpen(id)
// }
return (
<div>
@DZuz14
DZuz14 / Accordion.js
Created July 17, 2020 20:06
React Children Map 2
{React.Children.map(children, child => {
const id = child.props.children[0].props.id
const collapsed = React.cloneElement(child.props.children[0], {
handleOpen
})
const expanded = child.props.children[1]
return (
@DZuz14
DZuz14 / Accordion.js
Created July 17, 2020 20:21
Acccordion Finished
import React, { useState } from 'react'
import Collapsed from './Collapsed'
import Expanded from './Expanded'
/**
* @function Accordion
*/
const Accordion = ({ children, initial }) => {
const [open, setOpen] = useState(initial)