Setting Up Your Environment
If you haven’t already set up a React project, you can use Create React App:
bashCopy codenpx create-react-app react-wave
cd react-wave
Step 2: Create a Wave Component
We will create a component that renders a wave using SVG. Let’s create a new file called Wave.js
in the src
folder.
1. Create Wave.js
jsxCopy code// src/Wave.js
import React from 'react';
const Wave = ({ amplitude, frequency, speed }) => {
const wavePath = (t) => {
const y = amplitude * Math.sin(frequency * t);
return `${t},${y + 100}`; // Adjust y offset to position the wave in the SVG
};
const points = Array.from({ length: 200 }, (_, i) => wavePath(i * speed)).join(' ');
return (
<svg width="100%" height="200" viewBox="0 0 200 200">
<polyline
points={points}
fill="none"
stroke="blue"
strokeWidth="2"
strokeLinecap="round"
/>
</svg>
);
};
export default Wave;
Step 3: Integrate Wave Component in App
Now, let’s use the Wave
component in App.js
and add some basic state management to animate it.
1. Update App.js
jsxCopy code// src/App.js
import React, { useState, useEffect } from 'react';
import Wave from './Wave';
import './App.css';
const App = () => {
const [amplitude, setAmplitude] = useState(20);
const [frequency, setFrequency] = useState(0.1);
const [speed, setSpeed] = useState(0.2);
const [offset, setOffset] = useState(0);
useEffect(() => {
const interval = setInterval(() => {
setOffset((prevOffset) => (prevOffset + speed) % 200);
}, 100);
return () => clearInterval(interval);
}, [speed]);
return (
<div className="App">
<h1>Wave Animation</h1>
<Wave amplitude={amplitude} frequency={frequency} speed={offset} />
<div className="controls">
<label>
Amplitude:
<input
type="number"
value={amplitude}
onChange={(e) => setAmplitude(e.target.value)}
/>
</label>
<label>
Frequency:
<input
type="number"
value={frequency}
onChange={(e) => setFrequency(e.target.value)}
/>
</label>
<label>
Speed:
<input
type="number"
value={speed}
onChange={(e) => setSpeed(e.target.value)}
/>
</label>
</div>
</div>
);
};
export default App;
Step 4: Add Basic Styles
Add some basic styles in App.css
to make it look nicer:
cssCopy code/* src/App.css */
.App {
text-align: center;
padding: 20px;
}
.controls {
margin-top: 20px;
}
.controls label {
margin: 0 10px;
}
Step 5: Run Your Application
Start your application using:
bashCopy codenpm start
Summary
You now have a simple React application that features a wave animation! Users can control the amplitude, frequency, and speed of the wave through input fields. This serves as a basic introduction to creating animations with SVG in React.
Feel free to experiment with different values and enhance the app with more features, such as color customization or saving configurations!
Leave a Reply