【问题标题】:Get random result from API search从 API 搜索中获取随机结果
【发布时间】:2019-09-10 07:21:03
【问题描述】:

我有一个使用icanhazdadjoke API 检索笑话的简单应用程序。有一个搜索事件处理程序,它根据默认值为 15 的限制参数获取笑话。还有一个随机按钮,它调用限制设置为 1 的搜索方法。但是,每次单击随机按钮时,都会出现相同的结果--我怎样才能得到一个随机的单个搜索结果?

这是我的搜索处理程序:

  // Default parameter
  getJokes(limit = 15) {
    this.setState({ isFetchingJokes: true });

    fetch(
      `https://icanhazdadjoke.com/search?term=${
        this.state.searchTerm
      }&limit=${limit}`,
      {
        method: 'GET',
        headers: {
          Accept: 'application/json'
        }
    })
      .then(response => response.json())
      .then(json => {
        const jokes = json.results;
        this.setState({
          jokes,
          isFetchingJokes: false
        })
      });
  };

单击随机按钮时,将调用搜索处理程序,限制为 1(它作为渲染组件上的道具传递,来自另一个文件:onRandomize={() => this.getJokes(1)}

完整代码: App.js retrieval-form.js

【问题讨论】:

  • 也许这不是你的代码的问题,它是 API 的工作方式,对于相同的 searchTerm 它返回相同的结果,所以如果你总是请求 1 它返回总是相同的。您可以通过请求 10 或 20 来模拟随机化,然后随机获取一个。
  • 我同意 F.bernal,从 API 文档来看,只有在没有搜索词的情况下调用 API 时才会得到一个随机的笑话

标签: javascript reactjs


【解决方案1】:

您可以通过两种方式获得随机的单个结果

  1. 您必须在后端随机化结果,然后限制为 1。

2.通过使用从数组中设置随机一个的函数

 randomJoke(arr) {
    var joke = arr[Math.floor(Math.random()*arr.length)];
    this.setState({jokes: [joke] });
 }

【讨论】:

    【解决方案2】:

    通过 api 请求,您只能获取所有数组,然后使用此代码随机选择

    var joke = jokes[Math.floor(Math.random()*jokes.length)];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-31
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      • 2020-10-01
      • 2011-09-21
      • 2012-09-03
      • 1970-01-01
      相关资源
      最近更新 更多