使用 React useEffect 获取数据和条件渲染

jk777

我正在构建一个 MERN 堆栈应用程序,该应用程序获取有关大学课程的数据并将其呈现在表格中。CoursesTable.js组件如下所示:

import React, { useState, useEffect  } from 'react';
import { Table } from 'react-materialize';
import axios from 'axios';

const CoursesTable = () => {

  const [courses, setCourses] = useState([]);

  useEffect(() => {
    const fetchData = async () => {
      const coursesData = await axios.get('http://localhost:8001/')
      setCourses(coursesData.data)
    }
    fetchData()
  }, [])

  return (
    <Table>
      <thead>
        <tr>
          <th data-field="course-name">
            Name
          </th>
          <th data-field="course-prof">
            Prof.
          </th>
          <th data-field="course-code">
            Code
          </th>
        </tr>
      </thead>
      <tbody>
        {
          courses.length >= 1
          ? courses.map(course => 
              <tr key={course._id}>
                <td>
                  {course.name}
                </td>
                <td>
                  {course.prof}
                </td>
                <td>
                  {course.code}
                </td>
              </tr>
            )
          : <tr>
              <td>There is no course</td>
            </tr>
        }
      </tbody>
    </Table>
  );
}

export default CoursesTable;

我使用条件渲染,因此如果courses为空,则会显示一条消息,如没有课程当数组已满时,数据将呈现在表行中。

我的问题是:当courses已满并CoursesTable.js呈现时,在被数据替换之前,没有课程消息总是出现几毫秒。

我怎样才能解决这个问题?谢谢你们的帮助!

R·科利施

您可以进行条件检查,例如:

import React, { useState, useEffect  } from 'react';
import { Table } from 'react-materialize';
import axios from 'axios';

const CoursesTable = () => {

  const [courses, setCourses] = useState([]);
  const [isLoading, setLoading] = useState(true);

  useEffect(() => {
    const fetchData = async () => {
      const coursesData = await axios.get('http://localhost:8001/')
      setCourses(coursesData.data)
      setLoading(false);
    }
    fetchData()
  }, [])
  if(isLoading) { return <div> Loading ... </div> };
  return (
    <Table>
      <thead>
        <tr>
          <th data-field="course-name">
            Name
          </th>
          <th data-field="course-prof">
            Prof.
          </th>
          <th data-field="course-code">
            Code
          </th>
        </tr>
      </thead>
      <tbody>
        {
          courses.length >= 1
          ? courses.map(course => 
              <tr key={course._id}>
                <td>
                  {course.name}
                </td>
                <td>
                  {course.prof}
                </td>
                <td>
                  {course.code}
                </td>
              </tr>
            )
          : <tr>
              <td>There is no course</td>
            </tr>
        }
      </tbody>
    </Table>
  );
}

export default CoursesTable;

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

React挂钩:使用useEffect时无法获取状态更新

使用useEffect时,react组件会渲染几次

在获取数据时使用useEffect和useContext

组件未使用'useEffect'钩子在React中重新渲染

使用useEffect()和setTimeOut()进行条件渲染

React如何使用useEffect监视和更新状态?

在React中使用useState和useEffect的无限循环

使用Firebase和React的useEffect清理功能

渲染之前在useEffect挂钩中获取数据-React

无法在useEffect挂钩中使用React表单数据

使用useEffect无限渲染

Javascript-使用'useEffect()'和'useState'未定义来自异步获取的React数据

使用react组件和useEffect显示来自API的数据

如何使用useEffect获取数据?

如何使用useEffect获取数据?

React:使用 useEffect 获取数据并获取 .map 不是一个函数

React 使用 useEffect 异步加载数据

使用 useEffect 和 dispatch 时,react redux 导致无限循环

React - useEffect 和 setInterval

React useEffect 使用 axios 获取数据后返回空数组

使用 UseEffect 从 API 获取数据

React 如何使用 useEffect 和 useCallback 重新渲染状态钩子?

React 不从 useEffect 内部的 fetch 渲染数据

在 react js 中使用 useeffect 钩子获取数据

如何使用 React 和 useEffect 更改数组中的位置?

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

使用useEffect和componentDidMount从React中的Local Json获取

在 React 中使用 useEffect() 和 useCallback 获取数据

react 18 useState 和 useEffect 重新渲染