Сервис быстрых ответов от искусственного интеллекта
Вопрос пользователя:
Ответ нейросети:
Для решения этой проблемы с прокидыванием пропсов через несколько уровней компонентов можно использовать контекст в React. Создадим контекст для управления текущим воспроизводимым треком:
import { createContext, useContext, useState } from 'react';
import { TrackModel } from '../models/Track';
interface PlayerContextType {
currentPlayingTrack: TrackModel | null;
setCurrentPlayingTrack: (track: TrackModel | null) => void;
}
const PlayerContext = createContext<PlayerContextType>({
currentPlayingTrack: null,
setCurrentPlayingTrack: () => {},
});
export const usePlayer = () => useContext(PlayerContext);
export const PlayerProvider: React.FC = ({ children }) => {
const [currentPlayingTrack, setCurrentPlayingTrack] = useState<TrackModel | null>(null);
return (
<PlayerContext.Provider value={{ currentPlayingTrack, setCurrentPlayingTrack }}>
{children}
</PlayerContext.Provider>
);
};
Теперь обернем наше приложение в PlayerProvider
и воспользуемся хуком usePlayer
в компонентах, где нам необходим доступ к текущему воспроизводимому треку:
import { Layout } from '../components/Layout/Layout';
import { TrackList } from '../components/TrackList/TrackList';
import { PlayerProvider } from '../context/PlayerContext';
import { TrackModel } from '../models/Track';
const tracks: TrackModel[] = [
{
id: 1,
title: 'Space Oddity',
duration: '5:15'
},
{
id: 2,
title: 'The Man Who Sold The World',
duration: '3:59'
},
{
id: 3,
title: 'Starman',
duration: '4:14'
}
]
export const App = () => {
return (
<PlayerProvider>
<Layout>
<TrackList tracks={tracks} />
</Layout>
</PlayerProvider>
)
}
Теперь в компонентах Track
, PlayPause
и других, где необходим доступ к текущему воспроизводимому треку, можно использовать хук usePlayer
для получения текущего трека и установки нового трека без необходимости прокидывания через пропсы:
import { usePlayer } from '../context/PlayerContext';
const Track = ({ track }: { track: TrackModel }) => {
const { currentPlayingTrack, setCurrentPlayingTrack } = usePlayer();
// Используйте currentPlayingTrack и setCurrentPlayingTrack по необходимости
}
const PlayPause = ({ track }: { track: TrackModel }) => {
const { currentPlayingTrack, setCurrentPlayingTrack } = usePlayer();
// Используйте currentPlayingTrack и setCurrentPlayingTrack по необходимости
}
Таким образом, мы избавились от прокидывания пропсов через несколько уровней компонентов и использовали контекст для управления текущим воспроизводимым треком.
Напишите нам, если в вопросе есть ваши персональные данные (yasnoponyatno24@yandex.ru)
Обратите внимание: ответы, предоставляемые искусственным интеллектом, могут не всегда быть точными. Не рассчитывайте на них в критически важных областях, таких как медицина, юриспруденция, финансы или в вопросах, связанных с безопасностью. Для важных решений всегда обращайтесь к квалифицированным специалистам. Администрация сайта не несет ответственности за контент, сгенерированный автоматически.