Player.usePlayer

预计阅读时间: 3 分钟

在 Player.Provider 内访问播放器存储的钩子。

Player.usePlayer 让你可以从 Player.Provider 内的任何组件访问播放器存储。它有两个重载——不带参数用于直接存储访问,或带选择器用于响应式状态订阅。Player.usePlayer 的类型与你传递给 createPlayer 的功能相对应。它也可以作为独立导入使用(import { usePlayer } from '@videojs/react'),但独立版本返回的是无类型存储。

示例

存储访问

不带参数调用 Player.usePlayer() 获取存储实例。用于命令式操作,如播放、暂停和音量更改。组件不会在状态变更时重新渲染。

import { createPlayer } from '@videojs/react';
import { Video, videoFeatures } from '@videojs/react/video';

const Player = createPlayer({
  features: videoFeatures,
});

function Controls() {
  const store = Player.usePlayer();

  return (
    <div className="controls">
      <button type="button" onClick={() => store.play()}>
        Play
      </button>
      <button type="button" onClick={() => store.pause()}>
        Pause
      </button>
    </div>
  );
}

export default function StoreAccess() {
  return (
    <Player.Provider>
      <Player.Container className="media-container">
        <Video
          src="https://stream.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM/highest.mp4"
          autoPlay
          muted
          playsInline
          loop
        />
        <Controls />
      </Player.Container>
    </Player.Provider>
  );
}

选择器订阅

传递选择器函数来订阅特定状态。当所选值变更时,组件会重新渲染,默认使用浅相等比较。

import { createPlayer } from '@videojs/react';
import { Video, videoFeatures } from '@videojs/react/video';

const Player = createPlayer({
  features: videoFeatures,
});

function StateDisplay() {
  const state = Player.usePlayer((s) => ({
    paused: s.paused,
    currentTime: s.currentTime,
    duration: s.duration,
  }));

  return (
    <dl className="panel">
      <div>
        <dt>Paused</dt>
        <dd>{String(state.paused)}</dd>
      </div>
      <div>
        <dt>Time</dt>
        <dd>
          {state.currentTime.toFixed(1)}s / {state.duration.toFixed(1)}s
        </dd>
      </div>
    </dl>
  );
}

export default function Selector() {
  return (
    <Player.Provider>
      <Player.Container className="media-container">
        <Video
          src="https://stream.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM/highest.mp4"
          autoPlay
          muted
          playsInline
          loop
        />
        <StateDisplay />
      </Player.Container>
    </Player.Provider>
  );
}

API 参考

不带选择器

从 Player Provider 内访问播放器存储。

返回值

BaseStore & UnknownState

带选择器

从播放器存储中选择一个值。当所选值变更时重新渲染。

参数

参数类型默认值说明
selector*function从播放器存储状态派生值。类型:((state: UnknownState) => R)

返回值

R

参见