【问题标题】:map function value not displaying地图功能值不显示
【发布时间】:2018-12-31 18:39:37
【问题描述】:

在console.log 中显示 api 获取的数据,但在浏览器中显示 只显示白屏。在map函数中必须更新状态函数

import React, { Component } from 'react';;
import * as algoliasearch from "algoliasearch";
class App extends React.Component {

  constructor() {
    super();
    this.state = {
      data: { hits: [] }
    }
    // set data to string instead of an array  
  }

  componentDidMount() {
    this.getData();
  }

  getData() {
    var client = algoliasearch('api-id', 'apikey');
    var index = client.initIndex('');
    //index.search({ query:""}, function(data){  console.log(data) })    
    //index.search({ query:""}, function(data){  console.log("DataRecib=ved. First check this") }) 

    index.search({
      query: "",
      attributesToRetrieve: ['ItemRate', 'Color'],
      hitsPerPage: 50,
    },
    function searchDone(error, data) {
      console.log(data.hits)
    });
  }

  render() {
    return (
      <div id="root">
        {
          this.state.data.hits.map(function (data, index) {
            return
            <h1>{this.setState.data.ItemRate}<br />{data.Color}</h1> >            
            })}
      </div>
    );
  }
}
//render(<App />, document.getElementById('app')); 
export default App;

【问题讨论】:

标签: javascript reactjs


【解决方案1】:

几个错误-:

【讨论】:

    【解决方案2】:

    每个this.setState 都会触发一个render() 调用。如果你在 render 方法中setState,你会进入一个无限循环。

    你想在getData()函数中更新this.state.data.hits,那么你可以像这样显示数据:

    this.state.data.hits.map(data =>
      <h1>{data.Color}</h1>
    )
    

    例如,如果console.log(data.hits) 注销了正确的数据,那么您可以:

    this.setState({
      data: {
        hits: data.hits
      }
    })
    

    编辑:

    使用你提供的代码,应该是这样的:'

    getData = () => {
      var client = algoliasearch('A5WV4Z1P6I', '9bc843cb2d00100efcf398f4890e1905');
      var index = client.initIndex('dev_twinning');
      //index.search({ query:""}, function(data){ console.log(data) }) 
      // index.search({ query:""}, function(data){ console.log("Data Recib=ved. First check this") }) 
      index.search({
        query: "",
        attributesToRetrieve: ['ItemRate', 'Color'],
        hitsPerPage: 50,
      }, searchDone = (error, data) => {
        this.setState({
          data: {
            hits: data.hits
          }
        })
        console.log(data.hits)
      })
    }
    

    【讨论】:

    • 在您能够正确console.log 数据的部分,是您可以setState 的部分。检查更新的答案。
    • getData(){ var client = algoliasearch('A5WV4Z1P6I', '9bc843cb2d00100efcf398f4890e1905'); var index = client.initIndex('dev_twinning'); //index.search({ query:""}, function(data){ console.log(data) }) // index.search({ query:""}, function(data){ console.log("Data Recib=ved。首先检查这个") }) index.search({ query:"", attributesToRetrieve: ['ItemRate', 'Color'], hitsPerPage: 50,}, function searchDone(error, data){ this.setState ({ data: { hits: data.hits } }) console.log(data.hits) } ) }
    • 感谢您的回复。但我收到类似“TypeError:this.setState is not a function”的错误
    • 我认为是cannot read property of setState 错误吧?将getData() 更改为箭头函数。我会更新答案
    • 得到类似 TypeError 的错误:this.setState is not a function
    猜你喜欢
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 2022-12-03
    • 2019-06-07
    • 2021-09-26
    • 2020-10-31
    相关资源
    最近更新 更多