Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 如何通过搜索实现fetchapi_Reactjs_Api_React Redux_React Hooks - Fatal编程技术网

Reactjs 如何通过搜索实现fetchapi

Reactjs 如何通过搜索实现fetchapi,reactjs,api,react-redux,react-hooks,Reactjs,Api,React Redux,React Hooks,我有一个搜索栏。当我输入任何电影的名称时,必须显示过滤后的数据(作为从API获取的结果) 函数应用程序(){ const[films,setFilms]=useState([]) 常量[searchText,setSearchText]=useState(“”) 常量[filteredRes,setFilteredRes]=useState([]) 常量url=`http://www.omdbapi.com/?apikey=KEY&s=${searchText}` useffect(()=>{

我有一个搜索栏。当我输入任何电影的名称时,必须显示过滤后的数据(作为从API获取的结果)

函数应用程序(){
const[films,setFilms]=useState([])
常量[searchText,setSearchText]=useState(“”)
常量[filteredRes,setFilteredRes]=useState([])
常量url=`http://www.omdbapi.com/?apikey=KEY&s=${searchText}`
useffect(()=>{
loadData()
},[searchText])
const loadData=async()=>{
const res=等待axios.get(url)
setFilms(res.data.Search)
const filtered=wait films.filter(i=>i.toLowerCase().includes(searchText))
setFilteredRes(已过滤)
}
const onTextChange=(e)=>{
setSearchText(如目标值)
}
返回(
书店
{filteredRes.map(项=>{
报税表(
{item.title}
{项目年份}
)
})}
);
}
我有一个问题:
未处理的拒绝(TypeError):无法读取未定义的属性“filter”。但是为什么我要将抓取的电影保存在const[films]中呢?

o输出:

您不必过滤提取的数据。此外,Axios提取的数据已根据
serchText
进行过滤,因此Axios调用将完成所有操作

完整示例:

import React, { useState } from "react";
import Axios from "axios";

const APIKEY = "your api";
export default function App() {
  const [searchText, setSearchText] = useState("");
  const [films, setFilms] = useState([]);

  const handleSubmit = (event) => {
    event.preventDefault();
    if (!searchText) {
      alert("Please enter movie name");
      return;
    }
    Axios.get(
      `http://www.omdbapi.com/?i=tt3896198&apikey=${APIKEY}&s=${searchText}`
    )
      .then((response) => {
        console.log(response.data);
        setFilms(response.data.Search);
      })
      .catch((error) => {
        console.log(error);
      });
  };
  return (
    <div className="App">
      <form onSubmit={handleSubmit}>
        <input
          placeholder={"Search movie"}
          onChange={(event) => {
            setSearchText(event.target.value);
          }}
        />
        <button>Search</button>
      </form>

      {films.map((film) => (
        <div>
          <img src={film["Poster"]} alt={film["Title"]} width={100} />
          <p>{film["Title"]}</p>
          <p>{film["Year"]}</p>
        </div>
      ))}
    </div>
  );
}

import React,{useState}来自“React”;
从“Axios”导入Axios;
const APIKEY=“您的api”;
导出默认函数App(){
常量[searchText,setSearchText]=useState(“”);
const[films,setFilms]=useState([]);
const handleSubmit=(事件)=>{
event.preventDefault();
如果(!searchText){
警报(“请输入电影名称”);
返回;
}
Axios.get(
`http://www.omdbapi.com/?i=tt3896198&apikey=${APIKEY}&s=${searchText}`
)
。然后((响应)=>{
console.log(response.data);
setFilms(响应、数据、搜索);
})
.catch((错误)=>{
console.log(错误);
});
};
返回(
{
setSearchText(事件.目标.值);
}}
/>
搜寻
{films.map((film)=>(
{电影[“标题”]}

{电影[“年]}

))} ); }

好的。非常感谢。但我还有一个问题。我获取(查找)的数据在控制台中返回一个空数组。但当我插入您的url地址时,控制台显示401状态代码,并且据说我是未经授权的api密钥可能是错误的。然后使用条件呈现
{films?.map((film)=>({film[“Title”]}

{film film Year[“Year”]}

)}
修复了它,现在它可以工作了!感谢你来到月球并回来:)
import React, { useState } from "react";
import Axios from "axios";

const APIKEY = "your api";
export default function App() {
  const [searchText, setSearchText] = useState("");
  const [films, setFilms] = useState([]);

  const handleSubmit = (event) => {
    event.preventDefault();
    if (!searchText) {
      alert("Please enter movie name");
      return;
    }
    Axios.get(
      `http://www.omdbapi.com/?i=tt3896198&apikey=${APIKEY}&s=${searchText}`
    )
      .then((response) => {
        console.log(response.data);
        setFilms(response.data.Search);
      })
      .catch((error) => {
        console.log(error);
      });
  };
  return (
    <div className="App">
      <form onSubmit={handleSubmit}>
        <input
          placeholder={"Search movie"}
          onChange={(event) => {
            setSearchText(event.target.value);
          }}
        />
        <button>Search</button>
      </form>

      {films.map((film) => (
        <div>
          <img src={film["Poster"]} alt={film["Title"]} width={100} />
          <p>{film["Title"]}</p>
          <p>{film["Year"]}</p>
        </div>
      ))}
    </div>
  );
}