[Mission 3]swiper、useReft、githubの配備
ダイスまど
モードウィンドウの外部をクリックした場合、モードウィンドウを閉じます
これはuserefを利用することができます.
useRef
特定DOM選択時に使用するRECT HOOK
もとは。JSでは...
DOMセレクタ関数(
Reactで…!
->クラス構成部品->React.createRef
->関数構成部品->useref
手動でDOMを選択する必要がある場合
入力
userefの使用
useref()を使用してRefオブジェクトを作成し、そのオブジェクトを特定のドームのref値に設定すると、Refオブジェクトの.current値は、特定のDOMを指します.
では今から作りましょう
const outSection = useRef(); // 모달창 영역 밖에 해당하는 부분 useRef을 통해 선택
userefをoutSectionという変数に渡し、ref={}としてmodelに渡します.これにより、Refオブジェクトが生成されます.現在の値はモードを指します.
これからCustom hooksを作りましょう
useOnClickOutside.js
import React, { useEffect } from 'react'
const useOnClickOutside=(ref,handler)=> {
useEffect(() => {
const listener = (event) =>{
if(!ref.current || ref.current.contains(event.target)){
return;
}
//모달밖이라면
handler();
};
document.addEventListener("mousedown",listener);
document.addEventListener("touchstart",listener);
return () => {
document.addEventListener("mousedown",listener);
document.addEventListener("touchstart",listener);
}
}, [])
}
export default useOnClickOutside
マウスを離すとイベントリスナーが追加されます.返すために、返します.
このときrefとhandlerが受信され、handlerはモード(false)を有する.
したがって、userEffect hooksでhandler()関数を実行すると、モードウィンドウが閉じます.
逆に、モードでない場合やクリックした内容がイベントターゲットである場合は、
モデルは閉じないで戻ってきた.
このまま.
//커스텀 훅 만들기
useOnClickOutside(outSection,()=>{setModalOpen(false)});
Custom Hookを作ることができます.Swiper npm install swiper
sweeperを設定します. import Swiper, { Navigation, Pagination } from 'swiper';
// import Swiper and modules styles
import 'swiper/css';
import 'swiper/css/navigation';
import 'swiper/css/pagination';
// init Swiper:
const swiper = new Swiper('.swiper', {
// configure Swiper to use modules
modules: [Navigation, Pagination],
...
});
次に、モジュールをロードします. <Swiper
// install Swiper modules
modules={[Navigation, Pagination, Scrollbar, A11y]}
spaceBetween={50}
slidesPerView={5}
navigation
pagination={{ clickable: true }}
scrollbar={{ draggable: true }}
onSwiper={(swiper) => console.log(swiper)}
onSlideChange={() => console.log('slide change')}
>
{/* <div
className='slider__arrow-left'
onClick={()=>{ //스크롤 기능(완)
document.getElementById(id).scrollLeft -= window.innerWidth - 80;
}}>
<span
className='arrow'
>
{"<"}
</span>
</div> */}
<div id={id} className="row__posters">
{movies.map((movie) => (
<SwiperSlide>
<img
key={movie.id}
className={`row__poster ${isLargeRow && "row__posterLarge"}`}
src={`https://image.tmdb.org/t/p/original/${isLargeRow ? movie.poster_path: movie.backdrop_path}`}
loading ="lazy"
alt={movie.name}
onClick={()=> handleClick(movie)}
/>
</SwiperSlide>
))}
</div>
{/* <div
className='slider__arrow-right'
onClick={()=>{ //스크롤 기능(오)
document.getElementById(id).scrollLeft += window.innerWidth - 80;
}}>
<span
className='arrow'
>{">"}</span>
</div> */}
</Swiper>
そして水かきで包みます
ワイパースライドはmap関数に入れて包むべきです.
スキャナーの内容を修正します. <Swiper
// install Swiper modules
modules={[Navigation, Pagination, Scrollbar, A11y]}
navigation
pagination={{ clickable: true }}
loop={true} //끝에 갔을때 돌아오기
breakpoints={{ //크기별로 다르게 주기
1378:{
slidesPerView:6,
slidesPerGroup:6,
},
998: {
slidesPerView:5,
slidesPerGroup:5,
},
625: {
slidesPerView:4,
slidesPerGroup:4,
},
0:{
slidesPerView:3,
slidesPerGroup:3,
}
}}
onSlideChange={() => console.log('slide change')}
>
画面サイズによってグラフィックスの数が異なり、リサイクルできるようになりました.
まだあります.
彼女に造形をしてあげると.
.swiper-pagination{
text-align: right !important;
}
.swiper-pagination-bullet{
background: gray !important;
}
.swiper-pagination-bullet-active{
background: white !important;
}
.swiper-button-prev, .swiper-button-next{
color: white !important;
}
.swiper-button-prev:after, .swiper-button-next:after{
font-size: 1.3rem !important;
font-weight: 600;
}
出てきたのはきれいですね!!
Githubの導入
導入前にapiキーを環境変数として使用します.
api_key:process.env.REACT_APP_MOVIE_DB_API_KEY
以前はそうしていましたenvファイルを開き、環境変数をファイルに配置します.
そして楽譜にアップして、今
gh-pagesモジュールのインストールnpm install gh-pages --save-dev
今はパッケージjsonで"homepage":"https://seochan99.github.io/React",
このようにホームページアドレスを追加します
デプロイメントにスクリプトを追加します."predeploy" : "npm run build",
"deploy" : "gh-pages -d build"
このように2行加算する
最後にreact domのデフォルトパスを変更しますReactDOM.render(
<BrowserRouter basename='React'>
<App />
</BrowserRouter>,
document.getElementById('root')
);
このままbasenameを変更しましょう
ビルドファイルとともに公開されました
では今.
https://seochan99.github.io/React/
導入が成功したことを確認できます...!
Reference
この問題について([Mission 3]swiper、useReft、githubの配備), 我々は、より多くの情報をここで見つけました
https://velog.io/@seochan99/Mission3-swiper-useReft
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
npm install swiper
import Swiper, { Navigation, Pagination } from 'swiper';
// import Swiper and modules styles
import 'swiper/css';
import 'swiper/css/navigation';
import 'swiper/css/pagination';
// init Swiper:
const swiper = new Swiper('.swiper', {
// configure Swiper to use modules
modules: [Navigation, Pagination],
...
});
<Swiper
// install Swiper modules
modules={[Navigation, Pagination, Scrollbar, A11y]}
spaceBetween={50}
slidesPerView={5}
navigation
pagination={{ clickable: true }}
scrollbar={{ draggable: true }}
onSwiper={(swiper) => console.log(swiper)}
onSlideChange={() => console.log('slide change')}
>
{/* <div
className='slider__arrow-left'
onClick={()=>{ //스크롤 기능(완)
document.getElementById(id).scrollLeft -= window.innerWidth - 80;
}}>
<span
className='arrow'
>
{"<"}
</span>
</div> */}
<div id={id} className="row__posters">
{movies.map((movie) => (
<SwiperSlide>
<img
key={movie.id}
className={`row__poster ${isLargeRow && "row__posterLarge"}`}
src={`https://image.tmdb.org/t/p/original/${isLargeRow ? movie.poster_path: movie.backdrop_path}`}
loading ="lazy"
alt={movie.name}
onClick={()=> handleClick(movie)}
/>
</SwiperSlide>
))}
</div>
{/* <div
className='slider__arrow-right'
onClick={()=>{ //스크롤 기능(오)
document.getElementById(id).scrollLeft += window.innerWidth - 80;
}}>
<span
className='arrow'
>{">"}</span>
</div> */}
</Swiper>
<Swiper
// install Swiper modules
modules={[Navigation, Pagination, Scrollbar, A11y]}
navigation
pagination={{ clickable: true }}
loop={true} //끝에 갔을때 돌아오기
breakpoints={{ //크기별로 다르게 주기
1378:{
slidesPerView:6,
slidesPerGroup:6,
},
998: {
slidesPerView:5,
slidesPerGroup:5,
},
625: {
slidesPerView:4,
slidesPerGroup:4,
},
0:{
slidesPerView:3,
slidesPerGroup:3,
}
}}
onSlideChange={() => console.log('slide change')}
>
.swiper-pagination{
text-align: right !important;
}
.swiper-pagination-bullet{
background: gray !important;
}
.swiper-pagination-bullet-active{
background: white !important;
}
.swiper-button-prev, .swiper-button-next{
color: white !important;
}
.swiper-button-prev:after, .swiper-button-next:after{
font-size: 1.3rem !important;
font-weight: 600;
}
導入前にapiキーを環境変数として使用します.
api_key:process.env.REACT_APP_MOVIE_DB_API_KEY
以前はそうしていましたenvファイルを開き、環境変数をファイルに配置します.
そして楽譜にアップして、今
gh-pagesモジュールのインストール
npm install gh-pages --save-dev
今はパッケージjsonで"homepage":"https://seochan99.github.io/React",
このようにホームページアドレスを追加しますデプロイメントにスクリプトを追加します.
"predeploy" : "npm run build",
"deploy" : "gh-pages -d build"
このように2行加算する最後にreact domのデフォルトパスを変更します
ReactDOM.render(
<BrowserRouter basename='React'>
<App />
</BrowserRouter>,
document.getElementById('root')
);
このままbasenameを変更しましょうビルドファイルとともに公開されました
では今.
https://seochan99.github.io/React/
導入が成功したことを確認できます...!
Reference
この問題について([Mission 3]swiper、useReft、githubの配備), 我々は、より多くの情報をここで見つけました https://velog.io/@seochan99/Mission3-swiper-useReftテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol