【问题标题】:How to display "nothing found" after running a search in React在 React 中运行搜索后如何显示“未找到任何内容”
【发布时间】:2022-11-12 14:36:38
【问题描述】:

该消息在搜索之前显示。找不到结果后无法理解如何显示:

import { useState, lazy, useEffect } from 'react';
import * as movieAPI from '../../../services/movie-api';
import { Gallery } from 'components/Gallery/Gallery';

import { SearchForm, Button, Label, Input } from './MoviesPage.styled';
import { useSearchParams, useLocation } from 'react-router-dom';

const NotFoundPage = lazy(() => import('../NotFound/NotFoundPage.js'));

export default function MoviesPage() {
  const [searchQuery, setSearchQuery] = useState('');
  const [data, setData] = useState(null);
  // eslint-disable-next-line no-unused-vars
  let [_, setSearchParams] = useSearchParams();
  const handleInputChange = e => {
    setSearchQuery(e.currentTarget.value);
  };
  const { search } = useLocation();

  useEffect(() => {
    if (!search) {
      return;
    }
    movieAPI.fetchSearch(search.slice(7)).then(setData);
  }, [search]);

  const handleSubmit = e => {
    e.preventDefault();
    const normalizeSearchQuery = searchQuery.trim().toLowerCase();
    if (!normalizeSearchQuery) {
      return;
    }
    movieAPI.fetchSearch(normalizeSearchQuery).then(setData);
    setSearchParams(`query=${normalizeSearchQuery}`);
    // setSearchQuery('');
  };

  return (
    <>
      <SearchForm onSubmit={handleSubmit}>
        <Input
          type="text"
          name="searchQuery"
          autoComplete="off"
          autoFocus
          placeholder="Search movies"
          value={searchQuery}
          onChange={handleInputChange}
        />
        <Button type="submit">
          <Label>Search</Label>
        </Button>
      </SearchForm>

           {data?.results.length > 0 ? <Gallery data={data} /> : <NotFoundPage />}
    </>
  );
}
import { Link } from 'react-router-dom';

function NotFoundPage() {
  return (
    <div>
      <h2> Results not found :(</h2>
      <p>
        <Link to="/">Back</Link>
      </p>
    </div>
  );
}

export default NotFoundPage;

控制台截图:http://joxi.ru/MAjPxOGiYdBLDm

我试图创建一个带有电影搜索器按钮的页面。但是 NotFoundPage 函数在需要运行之前正在运行。那么,我做错了什么以及如何解决它?

【问题讨论】:

  • data && data.results.length === 0 可以是 NotFoundPage 的条件

标签: javascript reactjs react-router react-router-dom


【解决方案1】:

只呈现搜索结果数据已被提取。换句话说,等到data 是一个非空值。

例子:

  1. {data && data.results?.length ? <Gallery data={data} /> : <NotFoundPage />}
    
  2. {data
      ? data.results?.length ? <Gallery data={data} /> : <NotFoundPage />
      : null
    }
    
  3. {data
      ? data.results?.length ? <Gallery data={data} /> : <NotFoundPage />
      : <div>Searching...</div>
    }
    

【讨论】:

    猜你喜欢
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多