Skip to content

Commit 1a55402

Browse files
committed
feat: compound pattern
1 parent c2937f7 commit 1a55402

4 files changed

Lines changed: 35 additions & 0 deletions

File tree

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import React, { useState } from 'react'
2+
3+
const Toggle = ({ children }) => {
4+
const [on, setOn] = useState(false)
5+
const toggle = () => {
6+
setOn(!on)
7+
}
8+
const getChildProps = () => {
9+
return {
10+
on,
11+
toggle,
12+
}
13+
}
14+
return <>{React.Children.map(children, (child) => React.cloneElement(child, getChildProps()))}</>
15+
}
16+
export default Toggle
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import React from 'react'
2+
3+
const ToggleButton = ({ on, toggle }) => <button onClick={toggle}>{on ? 'Turn Off' : 'Turn On'}</button>
4+
export default ToggleButton
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import React from 'react'
2+
3+
const ToggleMessage = ({ on }) => <p>{on ? 'The button is ON' : 'The button is OFF'}</p>
4+
export default ToggleMessage

src/hocs/CompoundPattern/index.jsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import React from 'react'
2+
import Toggle from './Toggle'
3+
import ToggleButton from './ToggleButton'
4+
import ToggleMessage from './ToggleMessage'
5+
const ComPattern = () => (
6+
<Toggle>
7+
<ToggleButton />
8+
<ToggleMessage />
9+
</Toggle>
10+
)
11+
export default ComPattern

0 commit comments

Comments
 (0)