import reactLogo from './assets/react.svg';
import viteLogo from '/vite.svg';
import './App.css';
import { ChildArea } from './ChildArea';
export default function App() {
const [text, setText] = useState('');
const [open, setOpen] = useState(false);
const onChangeText = (e) => setText(e.target.value);
const onClickOpen = () => setOpen(!open);
const onClickCountUp = () => {
setCount(count + 1);
};
return (
<div className="App">
<input value={text} onChange={onChangeText} />
<br />
<br />
<button onClick={onClickOpen}>表示</button>
<ChildArea open={open} />
</div>
);
}
import { memo } from 'react';
const style = {
width: '100px',
height: '200px',
backgroundColor: 'khaki',
};
export const ChildArea = memo((props) => {
const { open } = props;
console.log('ChildAreaがレンダリングされた!');
const data = [...Array(2000).keys()];
data.forEach(() => {
console.log('...');
});
return (
<>
{open ? (
<div style={style}>
<p>子コンポーネント</p>
</div>
) : null}
</>
);
});
import { useState } from 'react';
import reactLogo from './assets/react.svg';
import viteLogo from '/vite.svg';
import './App.css';
import { ChildArea } from './ChildArea';
export default function App() {
const [text, setText] = useState('');
const [open, setOpen] = useState(false);
const onChangeText = (e) => setText(e.target.value);
const onClickOpen = () => setOpen(!open);
const onClickClose = () => setOpen(false);
return (
<div className="App">
<input value={text} onChange={onChangeText} />
<br />
<br />
<button onClick={onClickOpen}>表示</button>
<ChildArea open={open} onClickClose={onClickClose} />
</div>
);
}
import { memo } from 'react';
const style = {
width: '100px',
height: '200px',
backgroundColor: 'khaki',
};
export const ChildArea = memo((props) => {
const { open, onClickClose } = props;
console.log('ChildAreaがレンダリングされた!');
const data = [...Array(2000).keys()];
data.forEach(() => {
console.log('...');
});
return (
<>
{open ? (
<div style={style}>
<p>子コンポーネント</p>
<button onClick={onClickClose}>閉じる</button>
</div>
) : null}
</>
);
});
import { useState, useCallback } from 'react';
import reactLogo from './assets/react.svg';
import viteLogo from '/vite.svg';
import './App.css';
import { ChildArea } from './ChildArea';
export default function App() {
const [text, setText] = useState('');
const [open, setOpen] = useState(false);
const onChangeText = (e) => setText(e.target.value);
const onClickOpen = () => setOpen(!open);
const onClickClose = useCallback(() => setOpen(false), [setOpen]);
return (
<div className="App">
<input value={text} onChange={onChangeText} />
<br />
<br />
<button onClick={onClickOpen}>表示</button>
<ChildArea open={open} onClickClose={onClickClose} />
</div>
);
}