首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在API上搜索?

如何在API上搜索?
EN

Stack Overflow用户
提问于 2021-09-25 21:00:20
回答 1查看 30关注 0票数 0

我正在尝试在精灵宝可梦API上实现搜索功能,我已经尝试了不同的方法,但由于某些原因,我无法使其工作。

我的想法是创建一个函数来处理事件上的更改,然后将其传递给一个钩子(UseState),然后可能发出get请求并重新呈现?

我有这个方法来从API中获取所有的Pokemons。我是否应该创建一个新的设计来过滤请求?

代码语言:javascript
复制
export async function getAllPokemon(url) {
    return new Promise((resolve) => {
        fetch(url).then(res => res.json())
            .then(data => {
                resolve(data)
            })
    });
}

代码语言:javascript
复制
function App() {

  ....
  const [filter, setFilter] = useState("");

  function handleChange(event) {
    setOption(event.target.value)
    console.log(option)
  }

  const initialURL = `https://pokeapi.co/api/v2/pokemon?limit=50`

  const handleSearchChange = (e) => {
    setFilter(e.target.value);

  };

  useEffect(() => {
    async function fetchData() {
      let response = await getAllPokemon(initialURL)
      await loadPokemon(response.results);
      setLoading(false);
    }
    fetchData();
  }, [option])


  const loadPokemon = async (data) => {
    let _pokemonData = await Promise.all(data.map(async pokemon => {
      let pokemonRecord = await getPokemon(pokemon)
      return pokemonRecord

    }))
    setPokemonData(_pokemonData);

  }

  return (
    <>
      <div >
        <div>
          <input
            type="text"
            id="header-search"
            placeholder="Search Pokemon"
            name="s"
            onChange={handleSearchChange}
          />
          <button >Search</button>
        </div>
      </div>
      <div>
        {loading ? <h1 style={{ textAlign: 'center' }}>Loading...</h1> : (
          <>        
            <div className="grid-container">
              {pokemonData.map((pokemon) => {
                return <Card pokemon={pokemon} />
              })}
            </div>
            
          </>
        )}
      </div>
    </>
  );
}

export default App;
EN

回答 1

Stack Overflow用户

发布于 2021-09-25 21:34:53

你需要过滤你在onChange中得到的精灵宝可梦的数组。所以就像这样

代码语言:javascript
复制
onChange = e = > {
      setPokemons(pokemons.filter(pokemon => pokemon.indexOf(e.target.value) > -1))
}

因此,这将切换您在键入的每个键上呈现的本地状态变量,这反过来将过滤您的数组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69329996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档