如何使用reactjs从多个API获取搜索结果

艾伯塔省

我是ReactJS的新手,我试图通过从多个API提取数据来创建带有React的搜索功能。以下是Search.js文件。我尝试了很多次以使其发挥作用,并使结果在键入时实时显示。但是,我继续收到此错误消息TypeError:values.map不是function我在哪里出错,该如何解决?

function Search() {
  const [input, setInput] = useState("");
  const [results, setResults] = useState([]);

  const urls = [
    'https://jsonplaceholder.typicode.com/posts/1/comments',
    'https://jsonplaceholder.typicode.com/comments?postId=1'
  ]

  Promise.all(urls.map(url => fetch(url)
    .then((values) => Promise.all(values.map(value => value.json())))
    .then((response) => response.json())
    .then((data) => setResults(data))
    .catch(error => console.log('There was a problem!', error))

  ), [])

  const handleChange = (e) => {
    e.preventDefault();
    setInput(e.target.value);
  }
  if (input.length > 0) {
    results.filter((i) => {
      return i.name.toLowerCase().match(input);
    })
  }
  return ( <
    div className = "search"
    htmlFor = "search-input" >
    <
    input type = "text"
    name = "query"
    value = {
      input
    }
    id = "search"
    placeholder = "Search"
    onChange = {
      handleChange
    }
    /> {
    results.map((result, index) => {
        return ( <
            div className = "results"
            key = {
              index
            } >
            <
            h2 > {
              result.name
            } < /h2> <
            p > {
              result.body
            } < /p> {
            result
          } <
          /div>
      )
    })

} </div>

)
}
.search {
  position: relative;
  left: 12.78%;
  right: 26.67%;
  top: 3%;
  bottom: 92.97%;
}

.search input {
  /* position: absolute; */
  width: 40%;
  height: 43px;
  right: 384px;
  margin-top: 50px;
  top: 1.56%;
  bottom: 92.97%;
  background: rgba(0, 31, 51, 0.02);
  border: 1px solid black;
  border-radius: 50px;
  float: left;
  outline: none;
  font-family: 'Montserrat', sans-serif;
  font-style: normal;
  font-weight: normal;
  font-size: 16px;
  line-height: 20px;
  /* identical to box height */
  display: flex;
  align-items: center;
  /* Dark */
  color: #001F33;
}


/* Search Icon */

input#search {
  background-repeat: no-repeat;
  text-indent: 50px;
  background-size: 18px;
  background-position: 30px 15px;
}

input#search:focus {
  background-image: none;
  text-indent: 0px
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

德鲁·里斯(Drew Reese)

问题

  1. 你得到的回应fetch(url)只是一个单一的响应,所以没有什么映射。
  2. 数据获取发生在组件的功能主体中,因此在工作时这会导致渲染循环,因为每个渲染周期都会获取数据并更新状态。
  3. input.length > 0过滤返回什么也不做,因为返回的滤波阵列不会被保存,它的子串还错误地搜索。
  4. 尝试result在render函数中渲染对象,对象是无效的JSX

  1. 跳过这.then((values) => Promise.all(values.map((value) => value.json())))一步,然后继续访问JSON数据。
  2. 将获取的数据移动到安装useEffect挂钩中,以便仅运行一次。
  3. 将过滤器函数内联到渲染函数中,然后使用string.prototype.includes进行搜索。
  4. 基于其他呈现的属性以及result对象上的剩余内容,我假设您可能想呈现该email属性。

码:

function Search() {
  const [input, setInput] = useState("");
  const [results, setResults] = useState([]);

  useEffect(() => {
    const urls = [
      "https://jsonplaceholder.typicode.com/posts/1/comments",
      "https://jsonplaceholder.typicode.com/comments?postId=1"
    ];

    Promise.all(
      urls.map((url) =>
        fetch(url)
          .then((response) => response.json())
          .then((data) => setResults(data))
          .catch((error) => console.log("There was a problem!", error))
      ),
      []
    );
  }, []);

  const handleChange = (e) => {
    e.preventDefault();
    setInput(e.target.value.toLowerCase());
  };

  return (
    <div className="search" htmlFor="search-input">
      <input
        type="text"
        name="query"
        value={input}
        id="search"
        placeholder="Search"
        onChange={handleChange}
      />
      {results
        .filter((i) => i.name.toLowerCase().includes(input))
        .map((result, index) => {
          return (
            <div className="results" key={index}>
              <h2>{result.name}</h2>
              <p>{result.body}</p>
              {result.email}
            </div>
          );
        })}
    </div>
  );
}

编辑如何从多个API中使用reactjs获取搜索结果

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用Google API在附近的地点获取20多个结果

来自分类Dev

如何获取ReactJS物料表搜索结果计数

来自分类Dev

如何在reactjs中获取搜索结果的全名

来自分类Dev

如何获取搜索结果

来自分类Dev

Google Maps Places API-如何在多个结果上使用Google Maps搜索框获取国家/地区,邮政编码,数字,网站URL

来自分类Dev

使用Java GitHub API搜索存储库时,如何获得100多个结果?

来自分类Dev

如何使用 ReactJS 从多个 URL 获取数据?

来自分类Dev

Duckduckgo API获取搜索结果

来自分类Dev

如何显示多个搜索结果

来自分类Dev

使用Wikipedia的API从搜索查询中获取结果

来自分类Dev

使用流式API获取实时Twitter搜索结果

来自分类Dev

如何使用多个WHERE函数指定搜索结果?

来自分类Dev

如何使用MySQL和PHP对多个搜索结果进行分页?

来自分类Dev

如何使用硒获取总搜索结果数

来自分类Dev

Google自定义搜索API:如何获取URL的搜索结果内容描述(例如片段)

来自分类Dev

如何获取Google搜索结果计数(搜索结果总数)

来自分类Dev

从Github API获取所有搜索结果

来自分类Dev

从YouTube API获取类别的搜索结果

来自分类Dev

从 API 搜索中获取随机结果

来自分类Dev

弹性搜索:如何获取3个或更多字段的多个组合的结果

来自分类Dev

弹性搜索:如何获取3个或更多字段的多个组合的结果

来自分类Dev

如何限制多个表的mysql搜索结果?

来自分类Dev

如何从搜索结果中排除多个值

来自分类Dev

如何从Youtube API(搜索API)响应中获取所有结果

来自分类Dev

如何获取Eclipse中的搜索结果

来自分类Dev

如何在一个搜索/结果函数中集成多个API

来自分类Dev

Google Maps API地方搜索获取搜索结果数

来自分类Dev

使用 Django 的 Q 从 CBV 获取搜索结果

来自分类Dev

如何使用Box API获取要搜索的文件摘录?

Related 相关文章

  1. 1

    如何使用Google API在附近的地点获取20多个结果

  2. 2

    如何获取ReactJS物料表搜索结果计数

  3. 3

    如何在reactjs中获取搜索结果的全名

  4. 4

    如何获取搜索结果

  5. 5

    Google Maps Places API-如何在多个结果上使用Google Maps搜索框获取国家/地区,邮政编码,数字,网站URL

  6. 6

    使用Java GitHub API搜索存储库时,如何获得100多个结果?

  7. 7

    如何使用 ReactJS 从多个 URL 获取数据?

  8. 8

    Duckduckgo API获取搜索结果

  9. 9

    如何显示多个搜索结果

  10. 10

    使用Wikipedia的API从搜索查询中获取结果

  11. 11

    使用流式API获取实时Twitter搜索结果

  12. 12

    如何使用多个WHERE函数指定搜索结果?

  13. 13

    如何使用MySQL和PHP对多个搜索结果进行分页?

  14. 14

    如何使用硒获取总搜索结果数

  15. 15

    Google自定义搜索API:如何获取URL的搜索结果内容描述(例如片段)

  16. 16

    如何获取Google搜索结果计数(搜索结果总数)

  17. 17

    从Github API获取所有搜索结果

  18. 18

    从YouTube API获取类别的搜索结果

  19. 19

    从 API 搜索中获取随机结果

  20. 20

    弹性搜索:如何获取3个或更多字段的多个组合的结果

  21. 21

    弹性搜索:如何获取3个或更多字段的多个组合的结果

  22. 22

    如何限制多个表的mysql搜索结果?

  23. 23

    如何从搜索结果中排除多个值

  24. 24

    如何从Youtube API(搜索API)响应中获取所有结果

  25. 25

    如何获取Eclipse中的搜索结果

  26. 26

    如何在一个搜索/结果函数中集成多个API

  27. 27

    Google Maps API地方搜索获取搜索结果数

  28. 28

    使用 Django 的 Q 从 CBV 获取搜索结果

  29. 29

    如何使用Box API获取要搜索的文件摘录?

热门标签

归档