Languages
[Edit]
PL

Prosty animowany wykres słupkowy w React

3 points
Created by:
Reilly-Collier
860

Mało ludzi wie, że do zbudowania animowanego wykresu słupkowego nie potrzeba wiele?
W tym artykule postaram się przybliżyć Ci jak uzyskać taki efekt w Reakcie. 📊

Efekt końcowy:

Niestandardowy animowany wykres słupkowy w Reakcie
Niestandardowy animowany wykres słupkowy w React.

Główna idea polega na tworzeniu pojedynczych słupków które opisaliśmy od 0 do 100%, słupki są zorganizowane kolejno obok siebie w wykres generując przykładowy zestaw danych
w oparciu o funkcję cosinus.

Każda zmiana zestawu danych opisujących wykres powoduje przerenderowanie z płynnym przejściem (dzieje się to za sprawą prostego stylu o nazwie transition).

Efekt uzyskujemy za pomocą kilku linijek kodu, ponieważ większość robią tak właściwie style. 🎨

Praktyczny przykład:

// ONLINE-RUNNER:browser;

// import React from 'react';
// import ReactDOM from 'react-dom';

// ---------------------------------

const containerStyle = {
  	padding: '0 1px',
  	background: '#ffffff',
  	flex: '1'
};

const spaceStyle = {
  	background: '#ffffff',
  	transition: '0.3s'
};

const barStyle = {
  	background: '#00cc00',
  	transition: '0.3s'
};

const Bar = ({value}) => {
  	return (
      <div style={containerStyle}>
        <div style={{...spaceStyle, height: `${100 - value}%`}} />
        <div style={{...barStyle, height: `${value}%`}} />
      </div>
    );
};

const chartStyle = {
  	width: '400px',
  	height: '300px',
	display: 'flex',
  	overflow: 'hidden'
};

const Chart = ({data}) => {
	return (
      <div style={chartStyle}>
        {data.map((value, index) => <Bar key={index} value={value} />)}
      </div>
    );
};

// ---------------------------------

const calculateData = (xOffset) => {
	const data = [ ];
    for (var x = 0; x < 3.1415; x += 0.1) {
        const y = Math.cos(x + xOffset) + 1;
        data.push(50 * y);
    }
  	return data;
};

const App = () => {
    const [data, setData] = React.useState(() => calculateData(0));
  	const xOffsets = [0, 0.7853, 1.5707, 2.3559, 3.1415];
    return (
      <div>
        <Chart data={data} />
        <br />
        <div>
          <span>xOffset: </span>
          {xOffsets.map(xOffset => {
              const handleClick = () => setData(calculateData(xOffset));
              return (
                <button key={xOffset} onClick={handleClick}>{xOffset}</button>
              );
          })}
        </div>
      </div>
    );
};

const root = document.querySelector('#root');
ReactDOM.render(<App />, root);

Co myślicie o takim wykresie? Czy uważacie, że byłoby możliwe zbudowanie prostej biblioteki dla różnych typów wykresów?

Dajcie znać w komentarzach! 😊

Powiązane posty

Donate to Dirask
Our content is created by volunteers - like Wikipedia. If you think, the things we do are good, donate us. Thanks!
Join to our subscribers to be up to date with content, news and offers.

ReactJS - Artykuły

Native Advertising
🚀
Get your tech brand or product in front of software developers.
For more information Contact us
Dirask - we help you to
solve coding problems.
Ask question.

❤️💻 🙂

Join