当前位置: 首页 > 知识库问答 >
问题:

React:未捕获的TypeError:无法读取未定义的属性“Set State”

斜俊
2023-03-14

我试图显示在react for Elasticsearch中运行查询得到的结果,但我无法做到这一点。它给出了错误,但当我在一个变量中运行相同的查询时,它返回currect结果。有人能告诉我如何在“results”数组中存储结果以及如何在网页中显示结果吗?在以下方面获取错误:

import React, { Component } from 'react';
import client from './Credentials';
import '../App.css';
import DisplayResult from './DisplayResult';
export default class Search extends Component {

    constructor(props) {
        super(props);

        this.state = {results: []};
    }

    handleChange(event) {
        const search_query = event.target.value;

        client.search({
            index: 'tweet',
            type: 'tweet',
            size: 100,
            body: {
                query: {
                    match: search_query
                },
            }
        }, function (error, response, status) {
            if (error) {
                console.log("search error: " + error)
            }
            else {
                console.log("--- Response ---");
                // console.log(response);
                console.log("--- Hits ---");
                response.hits.hits.forEach(function (hit) {
                        console.log(hit._source.text);
                        this.setState(results: hit._source.text)
                    }.bind(this)

                )
            }
        });
    }




    render() {

        return(

            <div>
                <input className={"search-bar"} type="text" onChange={this.handleChange}>
                </input>
                <DisplayResult results={this.state.results} />
                {/*<button className={"button"}><Search /></button>*/}

            </div>

        );

    }

}

共有1个答案

庄高谊
2023-03-14

我认为您正在丢失这个的上下文。您可以像这样格式化代码。

import React, { Component } from 'react';
import client from './Credentials';
import '../App.css';
import DisplayResult from './DisplayResult';
export default class Search extends Component {

    constructor(props) {
        super(props);

        this.state = {results: []};
    }

    handleChange(event) {
        let _this = this;
        const search_query = event.target.value;

        client.search({
            index: 'tweet',
            type: 'tweet',
            size: 100,
            body: {
                query: {
                    match: search_query
                },
            }
        }, function (error, response, status) {
            if (error) {
                console.log("search error: " + error)
            }
            else {
                console.log("--- Response ---");
                // console.log(response);
                console.log("--- Hits ---");
                response.hits.hits.forEach(function (hit) {
                        console.log(hit._source.text);
                        _this.setState(results: hit._source.text)
                    }.bind(this)

                )
            }
        });
    }

您只需使用胖箭头函数来提取this的词法绑定(我的建议)。

 function (error, response, status) {
            if (error) {
                console.log("search error: " + error)
            }
            else {
                console.log("--- Response ---");
                // console.log(response);
                console.log("--- Hits ---");
                response.hits.hits.forEach(function (hit) {
                        console.log(hit._source.text);
                        _this.setState(results: hit._source.text)
                    }.bind(this)

                )
            }
        });
 (error, response, status) => {
            if (error) {
                console.log("search error: " + error)
            } else {
                console.log("--- Response ---");
                // console.log(response);
                console.log("--- Hits ---");
                response.hits.hits.forEach(function (hit) {
                        console.log(hit._source.text);
                        this.setState(results: hit._source.text)
                    });
            }
        });
 类似资料:
  • 问题内容: 如果这个问题已经回答,我深表歉意。我尝试搜索解决方案,但找不到适合我的代码的任何解决方案。我还是jQuery新手。 对于两个不同的页面,我有两种不同类型的粘滞菜单。这是两者的代码。 我的问题是,底部粘性菜单的代码不起作用,因为第二行代码会引发错误,提示“未捕获的TypeError:无法读取未定义的属性’top’”。实际上,除非将第二行以下的其他jQuery代码放在第二行之上,否则根本不

  • 问题内容: 我收到此错误,它源自jquery框架。当我尝试在文档准备好加载选择列表时,出现此错误。我似乎找不到我为什么收到此错误的信息。 它适用于change事件,但是尝试手动执行功能时出现错误。 未捕获的TypeError:无法读取未定义的属性’toLowerCase’-> jquery-2.1.1.js:7300 这是代码 问题答案: 当您调用DOMReady时,的上下文将不是元素。 您可以通

  • 问题内容: 我有一些JavaScript代码会给出此错误 码 这个错误是什么意思? 问题答案: 好像您的值之一,属性键为“值”是未定义的。在执行if语句之前测试,和是否已定义:

  • 我刚开始使用D3,在我的演示脚本中出现了以下错误- firstd3.jsp:31未捕获的TypeError:无法读取未定义的属性“linear” 我的演示代码如下 是什么导致了这个错误?以及如何解决

  • 我发现很多回答的问题与我的问题相似,但所有这些元素实际上都是“未定义的”。就我而言,它是存在的。 我的代码按预期工作。基本上,它将eventListener添加到作为锚的所有模式解除按钮中。关闭函数是找到最外层的modal div,并为其提供“hidden”类,该类将其显示设置为none。 它正确地关闭了模态,但在模态关闭后,该错误就会出现。 约会。js:61未捕获类型错误:无法读取未定义的属性“

  • 我遵循这一点,使用DataTables插件启用多个表(在同一页上)。对于手动表,它可以工作,但对于动态创建的表,它显示以下错误: 未捕获的TypeError:无法读取未定义的属性“mData” 我的页面srcipt: 我的超文本标记语言第一个表: 第二张表: 知道怎么修吗? 注意:我也阅读了这个未回答的问题,相同的错误,但我的标准不同,因此它不是重复的。