I'm currently working on a movie type app and fetching data from an API. I've made two separate components in my react project:
component one : Hero that displays movie poster
component two : Slider that displays all of the movies.
I've added a state variable to update the hero movie poster when each individual movie from the slider is clicked.
Originally, I had both components as the same component and that worked fine. I decided to separate them as I wanted to reuse the slider with another movie genre without having another hero section.
My question is how do I pass the setSelectMovie state variable from the HeroSlider to the Slider component to update the hero when a movie from the slider is clicked.
I have attached some references, thanks
import React from 'react'
import HeroSlider from '../components/HeroSlider';
import Slider from '../components/Slider'
function Movies({movies, topMovies, TvShows}) {
return (
<>
<HeroSlider items={movies} />
<Slider items={movies} />
<Slider items={topMovies} />
</>
);
}
export default Movies
import React, {useState }from 'react';
import FilterButton from './FilterButton';
function HeroSlider({items}) {
//state
const [selectMovie, setSelectMovie] = useState(items.at(10));
return (
<>
{/* Hero Section */}
<div className="hero">
<div className="bg-image">
<img src={'https://image.tmdb.org/t/p/w500' + selectMovie.backdrop_path} className="banner-img" />
</div>
<div className="movie-details">
<h1>{selectMovie.original_title}</h1>
<p>{selectMovie.overview}</p>
<button className='trailer-btn'>Watch Trailer</button>
</div>
</div>
{/*Originally had the slider here before breaking off into a seperate component (This Worked) */}
{/*
<div className="media-scroller snaps-inline">
{items.map((image, index) => (
<div className="media-element">
<img src={'https://image.tmdb.org/t/p/w500' + image.poster_path} onClick={()=>{setSelectMovie(image)}} />
</div>
))}
</div> */}
</>
);
}
export default HeroSlider;
import React, {useState }from 'react';
function Slider ({items}) {
return (
<>
<h3 className='movie-genre'>Picked For You</h3>
<div className="media-scroller snaps-inline">
{items.map((image, index) => (
<div className="media-element">
<img src={'https://image.tmdb.org/t/p/w500' + image.poster_path} onClick={()=>{setSelectMovie(image)}} />
</div>
))}
</div>
</>
);
}
export default Slider;