微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Js中的if()语句

如何解决Js中的if()语句

这里我有一个搜索组件,我想要实现的是他的。我将如何处理数组中没有项目的情况,我应该做一个 if 语句,或者我应该怎么做才能实现这一点。帮助将不胜感激。谢谢

import React,{useState,useEffect,useRef,useContext}from 'react'
import {FaSearch} from 'react-icons/fa'
import { 
    Link,useHistory
  } from "react-router-dom";
import { BookContext } from '../../context/books';
import SearchBooks from './SearchBooks';

const Search = () => {

  const {data}= useContext(BookContext)
  const [searchValue,setSearchValue] = React.useState('');
  const history= useHistory()

  function filterBooks(book) {
    console.log(book);
    if(!searchValue.length ) return book.bookName > 10
    if (!searchValue.length  ) return false;
    return book.bookName?.toLowerCase().includes(searchValue.toLowerCase());
  }


    return (
        <div className='search__cont' >   
           <SearchBooks searchValue={searchValue} setSearchValue={setSearchValue 
 }/>     

              {Object.keys(data).filter(filterBooks).length === 0 &&(
               <div>
                <h3>Book not found</h3>
               </div>
                )}
           {Object.keys(data)
             .map((key) => data[key])
             .reduce((acc,curr) => acc.concat(curr),[])
             .filter(filterBooks)
             .map((book) => {          
             return (
             <>       
              <div  className='search__books'
                onClick={() => {
                  history.push("/book/id",{ book }); setSearchValue('')
                }}
               >            
                {" "}
                {book.bookName}{" "}
              </div>            
            </>
          );
        })}
           </div>
    )
}

export default Search

解决方法

像这样:

return book.length === 0 ? (
    <div>
      <h1>No items has been found </h1>
    </div>
) : (
    <div className='search__books'> ... </div>
);

这称为 ternary operator。如果条件为真,它将返回第一部分,否则将返回第二部分。

编辑:因为你需要一个更完整的例子,大致如下:

function filter() {
  const books = Object.keys(data)
    .map((key) => data[key])
    .reduce((acc,curr) => acc.concat(curr),[])
    .filter(...);

  return books.length ?
    books.map((book) => (
      <div className='search__books' onClick={() => {
        history.push("/book/id",{ book });
        setSearchValue('')
      }}>            
        {" "}
        {book.bookName}{" "}
      </div>            
    ))) : (
      <div>
        <h1>No items has been found </h1>
      </div>
    );
}

return (
  <div className='search__cont' >   
    <SearchBooks searchValue={searchValue} setSearchValue={setSearchValue }/>          
    {filter()}
  </div>
)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?