从 React 中的状态获取单个数据

林由希

我正在尝试制作一个页面来显示每个视频的详细信息。
我从后端获取了多个视频数据并将它们存储为全局状态。如果我通过应用程序内的链接转到页面,则此代码有效。但是如果我从浏览器重新加载或打开 URL 目录,它无法加载单个视频数据。

我该怎么做才能使这项工作?

谢谢

单个视频页面

import { useState, useEffect, useContext } from "react";
import { useParams } from "react-router-dom";
import { VideoContext } from "../context/videoContext";

const SingleVideo = () => {
  let { slug } = useParams();

  const [videos, setVideos] = useContext(VideoContext);
  const [video, setVideo] = useState([]);

  useEffect(() => {
    const result = videos.find((videos) => {
      return videos.uuid === slug;
    });
    setVideo((video) => result);
  }, []);

  return (
    <>
      <div>
        <h1>{video.title}</h1>
        <p>{video.content}</p>
        <img src={video.thumbnail} alt="" />
      </div>
    </>
  );
};
export default SingleVideo;

语境

import React, { useState, createContext, useEffect } from "react";
import Axios from "axios";
import { AxiosResponse } from "axios";

export const VideoContext = createContext();

export const VideoProvider = (props) => {
  const [videos, setVideos] = useState([]);

  const config = {
    headers: { "Access-Control-Allow-Origin": "*" },
  };
  useEffect(() => {
    //Fetch Vidoes
    Axios.get(`http://localhost:5000/videos`, config)
      .then((res: AxiosResponse) => {
        setVideos(res.data);
      })
      .catch((err) => {
        console.log(err);
      });
  }, []);

  return (
    <VideoContext.Provider value={[videos, setVideos]}>
      {props.children}
    </VideoContext.Provider>
  );
};
ale917k

我认为原因是因为当您刷新应用程序时,您会在上下文中获取视频数据,并且在您收到这些数据之前,您的单个视频页面组件上的 useEffect 就会运行。

要修复,您可以简单地修改单个视频组件中的 useEffect 以在您收到这些数据时进行更新:

useEffect(() => {
  if (videos.length) {
    const result = videos.find((videos) => {
      return videos.uuid === slug;
    });
    setVideo((video) => result);
  }
}, [videos]);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Redux和React从数据库中获取单个数据元素?

react中如何获取状态的初始数据

在React中,如何在不映射整个对象的情况下获取数据并在状态数组中呈现单个对象?

如何在React Actions Redux中获取状态数据?

在React中,以本地或全局状态存储获取的Firebase数据?

React Native 中的 useState 获取之前状态的数据

React中数据获取完成后如何设置状态

从 api 获取数据并将其传递给 React 中的状态

无法使用在 useEffect -React 中获取的数据设置状态

在React中获取数据

如何在React中从子状态获取选定数据到父状态

React 钩子重置状态并获取数据

如何从以前获取的数据更新React状态?

从JSON数组获取数据并使用React中的循环基于数据设置状态

如何从多个状态中过滤数据以React Native的方式从单独的API获取数据

如何在React中获取更多数据并将其正确存储在状态中?

从 React 中的数据数组渲染单个元素

在React Native中通过获取设置状态

无法从状态中获取价值 - React

React - 从状态中获取组件的名称

如何从前端 react.js 中的 node.js 中的多个数据库中获取数据

在 React 中从 WatermelonDB 获取数据

在React中从api获取数据

在 React 中获取 API 数据

在 React 中映射获取的数据

尝试从无状态React组件的localStorage中获取数据时出现NodeInvocationException

在 React 中,如何更新状态并从单个事件调用函数?

无法从以React状态存储的数组中检索单个项目

如何在React中显示状态数据?