iT邦幫忙

2022 iThome 鐵人賽

DAY 22
0
Modern Web

新手進化日記,從React至Redux Saga系列 第 22

Day 22 - YouTube Iframe API實際應用 / react-router-dom v6

  • 分享至 

  • xImage
  •  
tags: iThome 鐵人賽 30天

昨天做好了YouTube Iframe API component今天來實測用看看吧。

先把要傳入的參數列出來並準備妥當:

參數 說明
v YouTube影片ID
t 開始時間,預設0
setPlayer 設定player的function, (player) => {}
playerid 要變為iframe的區塊id
player 傳入setPlayer後的player
onPlayerReady 當播放器準備好時會執行此function
onPlayerStateChange 當影片狀態改變時會執行此function
onPlaybackQualityChange 當影片畫質改變時會執行此function

先來測試一下:

import React, { useState } from 'react'
import YouTubeIframe from '../elements/YouTubeIframe'

export default function WatchPage(props) {
    const {  } = props
    const [player, setPlayer] = useState(null)

    return (
        <div>
            <div id="player"></div>
            <YouTubeIframe
                v={"Ga22mpTDS6A"}
                t={0}
                playerid="player"
                player={player}
                setPlayer={pl => setPlayer(pl)}
            />
        </div>
    )
}

畫面有順利出來了!

但其實在畫面出來前有碰到一點小坑,是react-router-dom的問題,所以我索性把它改成最新的v6版本了,至於要怎麼改就來看看吧!

react-router-dom v6

從v5升級到v6的第一個轉變是Switch變成了Routes,用法一樣,再來是Route裡的component也變成了elementexact也不能用了,所以這裡把/watch往前擺,更改後的Content大致長這樣:

<Routes>
    <Route path="/watch" element={<WatchPage />} />
    <Route path="/" element={<HomePage />} />
</Routes>

至於Redirect也是被新的元件Navigate所取代,所以更改後如下:

<Routes>
    <Route path="/watch" element={<WatchPage />} />
    <Route path="/" element={<HomePage />} />
    <Route path="*" element={<Navigate to="/" />} />
</Routes>
<Route path="*" element={<Navigate to="/" />} />

這條為取代Redirect的用法,然後path="*"代表所有路徑都通吃的意思,一樣依照Routes (原Switch) 的原理,第一個匹配後面就不執行,所以當前面都匹配完了就會把不正確的網址導回指定網址囉~

然後最上層的BrowserRouter還是一樣不變,/src/index.js

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import { BrowserRouter as Router } from "react-router-dom";

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    <Router> {/* 加上這裡 */}
      <App />
    </Router> {/* 加上這裡 */}
  </React.StrictMode>
);

// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();

後記

今天突然一個小插曲把原先的計劃給打亂了,不過剛好業趁這個機會把新版的react-router-domv6給稍微學習一下,也算是學到了新的用法,才不會突然用不一樣的版本而不知所措,那明天就要來正式動工編輯畫面了!

附上專案:2022-iThomeIronman

對資安或Mapbox有興趣的話也可以觀看我們團隊的鐵人發文喔~


上一篇
Day 21 - YouTube Iframe API: 打造全面的YT控制器component
下一篇
Day 23 - 影片標記頁面初步刻畫
系列文
新手進化日記,從React至Redux Saga30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言