1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ページ内の文字列を検索してフィルタリングするコンポーネント

Posted at

ページ内の文字列を検索して、それだけ残す

こんなかんじに検索して、絞り込むものを作ります。

2021-09-03 21_44_36-【コンペヤ】物件同士が比較しやすい部屋探しサイト.png
2021-09-03 21_45_08-【コンペヤ】物件同士が比較しやすい部屋探しサイト.png
前提として、環境は
・Next.js
・TypeScript
となっています。
※アイコンとかは違うコンポーネントなので省略して書きます。

index.tsx
import styles from './SearchForm.module.scss'
import cn from 'classnames'

export interface Props = {
  placeholder?: string
  className?: string
  id?: string
  onInput?: (e: React.FormEvent<HTMLInputElement>) => void
}

export const SearchForm: React.FC<Props> = ({ className, placeholder, id, onInput }) => (
  <form className={cn(styles.default, className)}>
    <input name="search" type="text" placeholder={placeholder} id={id} onInput={onInput} />
  </form>
)

このように検索するinputタグのコンポーネントを作ります。
これはまだ、外観を用意しただけで、実際に動かすのはimportされたコンポーネント内です。

pages/index.tsx
import SearchForm from '~/components/domains/SearchForm'

const CityListPage: NextPage = () => {
 // 入力キーワードをState化する
 const [searchKeyword, updateSearchKeyword] = React.useState('')
 // 入力イベントに反応してStateを更新する
  const onInput = (event: React.FormEvent<HTMLInputElement>) => {
   // 入力キーワードをstateに格納する
    updateSearchKeyword(event.currentTarget.value)
  }
  const filteredList = cities.filter((item) => {
   // 文字列の部分一致するものだけを残す
    return new RegExp(searchKeyword).test(item.name)
  })
  return (
    <SearchForm placeholder="市郡を検索する" onInput={onInput} />
    <div>
      // ここでマッピングして表示されることとなります
	{filteredList.map((item, key) => {
          return (
            ...
          )
        })}
     </div>
  )
}

export default CityListPage

これで、実装は出来たかと思います。

このページを参考に、日本語の文字列で検索できるようにアレンジを加えました。
https://zenn.dev/himenon/articles/4c6d7ed8b7df30

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?