PL
React - komponent AutoSizer
6
points
W tym artykule, chcielibyśmy pokazać, jak w React-cie monitorować aktualny rozmiar elementu div
za pomocą komponentu AutoSizer
.
AutoSizer
pozwala obsłużyć wydarzenie onResize
.
// ONLINE-RUNNER:browser;
// Uwaga: Odkomentuj poniższe linijki podczas pracy z kompilatorem JSX:
// import React from 'react';
// import ReactDOM from 'react-dom';
const AutoSizer = React.memo(({ interval, children, ...other }) => {
const reference = React.useRef();
const [size, setSize] = React.useState();
React.useEffect(() => {
let storedWidth = size?.width;
let storedHeight = size?.height;
const id = setInterval(() => {
const element = reference.current;
if (element) {
const width = element.offsetWidth;
const height = element.offsetHeight;
if (width != storedWidth || height != storedHeight) {
storedWidth = width;
storedHeight = height;
setSize({ width, height });
}
}
}, interval ?? 100);
return () => {
clearInterval(id);
};
}, [interval]);
return (
<div ref={reference} {...other}>
{size && children && children(size.width, size.height)}
</div>
);
});
// Przykład:
const App = () => (
<div>
<h1>Moja strona!</h1>
<AutoSizer style={{background: '#e1e1e1', width: '400px'}}>
{(width, height) => {
return (
<pre>
Kontener:<br />
- szerokość: {width}<br />
- wysokość: {height}
</pre>
);
}}
</AutoSizer>
</div>
);
const root = document.querySelector('#root');
ReactDOM.render(<App />, root );