'How to call different functions in different components based onClick function in ReactJs
//Each Size has a function for every letter which should be called if the letter in the currentsize is clicked. Click here to see how it should display
function App() {
const [pattern, setPattern] = useState()
const [size, setSize] = useState([ Small(), Medium, Large ])
const [letter, setLetter] = useState()
useEffect(() => {
setPattern();
return () => {
setSize()
}
}, [size, pattern])
return (
<Router>
<div id='app'>
<Content setPattern={setPattern} />
<Size setSize={setSize}/>
<Switch>
<Route exact path='/'>
<Medium />
</Route>
<Route path='/small'>
<Small pattern={pattern}/>
</Route>
<Route path='/large'>
<Large pattern={pattern}/>
</Route>
//Size components
function Size({ setSize }){
return (
<div id='size'>
<Link to='small' onClick={() => setSize(Small)} className='button'>Small</Link>
<Link to='/' onClick={() => setSize(Medium)} className='button'>Medium</Link>
<Link to='large' onClick={() => setSize(Large)} className='button'>Large</Link>
<Link to='xLarge' onClick={() => setSize(xLarge)} className='button'>X-Large</Link>
</div>
//Clickable letters to display in the current size
function Content({ setPattern, pattern }) {
const history = useHistory()
return (
<div id='content'>
<Link to={history} onClick={() => setPattern(!pattern, LetterA())} className='button-sm'>A</Link>
<Link to={history} onClick={() => setPattern(!pattern, LetterB())} className='button-sm'>B</Link>
<Link to={history} onClick={() => setPattern(!pattern, LetterC())} className='button-sm'>C</Link>
<Link to={history} onClick={() => setPattern(!pattern, LetterD())} className='button-sm'>D</Link>
<Link to={history} onClick={() => setPattern(!pattern, LetterE())} className='button-sm'>E</Link>
</div>
import { bgColorX, bgColorY, imageX, imageY, verticalAxis, pieces } from '../Layouts/Large';
//Letters functions to be called
export default function LetterA() { for(let i = 3; i < verticalAxis.length - 3; i++) {
for( let k = 3; k <= 17; k++) {
k % 2 === 1 ?
pieces.push({ image: imageY, x: k, y: i }) :
pieces.push({ image: imageX, x: k, y: i });
}
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
