Javascript 反应类型错误:this.setState不是函数

Javascript 反应类型错误:this.setState不是函数,javascript,reactjs,Javascript,Reactjs,目前,我正在react中编写一个与.NET Core web api配合使用的应用程序,我得到: TypeError:this.setState不是函数 当我在最后一段中得到这个错误时,我会解释 现在,该视图的工作方式如下:在一个页面上,我有一个表,其中的数据是从JSON数据数组中播种的,旁边有几个输入。当我单击一个表行时,它会将行数据放入输入,我可以从这里编辑数据。有两个函数在处理这个问题,首先:editData向api发送POST请求,然后修改数据库中编辑的对象。完成此请求后,第二个功能:g

目前,我正在react中编写一个与.NET Core web api配合使用的应用程序,我得到:

TypeError:this.setState不是函数

当我在最后一段中得到这个错误时,我会解释

现在,该视图的工作方式如下:在一个页面上,我有一个表,其中的数据是从JSON数据数组中播种的,旁边有几个输入。当我单击一个表行时,它会将行数据放入输入,我可以从这里编辑数据。有两个函数在处理这个问题,首先:
editData
向api发送POST请求,然后修改数据库中编辑的对象。完成此请求后,第二个功能:
getData
将运行并使用新的编辑数据刷新表格。下面是它的外观:

建造商:

class SomeClass extends React.Component {
    constructor(props) {
        super(props);
        this.props = props;
        this.state = {
            someArray: [],
            tableData1: "",
            tableData2: "",

            validationSummary: [],
            isSubmitting: false
        }
        this.handleChange = this.handleChange.bind(this); //function to handle change on inputs
        this.getData = this.getData.bind(this);
        this.editData= this.editData.bind(this);
    }
获取数据的函数:

    async getData() {
        return fetch("http://localhost:5000/api/somecontroller/getroute")
            .then(response => response.json())
            .then(data => {
                this.setState({
                    someArray: data,
                    tableData1: "",
                    tableData2: "", //clear inputs
                })
            })
    }
最后编辑对象函数:

    async editData() {
        var validationSummary = []

        if (this.state.tableData1 !== "" && this.state.tableData2 !== "") {
            this.setState = {
                validationSummary: [], //clear summary
                isSubmitting: true
            }

            let response = await fetch('http://localhost:5000/api/somecontroller/editroute', {
                method: "POST",
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify({
                    data1: tableData1,
                    data2: tableData2
                })
            });

            if (response.status !== 200) {
                validationSummary.push("Something went wrong")
                this.setState = {
                    validationSummary: validationSummary,
                    isSubmitting: false
                }
            }

            else {
                await this.getData()
            }
        }

        else {
            validationSummary.push("Inputs cannot be empty")
            this.setState = {
                validationSummary: validationSummary,
                isSubmitting: false
            }
        }
    }
    async getData() {
        return fetch("http://localhost:5000/api/somecontroller/getroute")
            .then(response => response.json())
            .then(data => {
                this.setState({ //getting error here
问题是,每当我编辑一些数据并提交它以向API发送请求时,网站就会停止,我在
getData
函数中的
this.setState
行中得到前面提到的错误:

    async editData() {
        var validationSummary = []

        if (this.state.tableData1 !== "" && this.state.tableData2 !== "") {
            this.setState = {
                validationSummary: [], //clear summary
                isSubmitting: true
            }

            let response = await fetch('http://localhost:5000/api/somecontroller/editroute', {
                method: "POST",
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify({
                    data1: tableData1,
                    data2: tableData2
                })
            });

            if (response.status !== 200) {
                validationSummary.push("Something went wrong")
                this.setState = {
                    validationSummary: validationSummary,
                    isSubmitting: false
                }
            }

            else {
                await this.getData()
            }
        }

        else {
            validationSummary.push("Inputs cannot be empty")
            this.setState = {
                validationSummary: validationSummary,
                isSubmitting: false
            }
        }
    }
    async getData() {
        return fetch("http://localhost:5000/api/somecontroller/getroute")
            .then(response => response.json())
            .then(data => {
                this.setState({ //getting error here
我已经读过几个与此类似的问题,但每次解决方案都是将函数绑定到
构造函数中的
this
。但是,正如您在我的代码中看到的,我已经将
getData
editData
函数绑定到
this
。我可能必须提到,当我从
editData
函数中删除所有
this.setState
引用时,页面工作正常,不再出现任何错误。我是个新手,所以我很好奇为什么会出现这样的错误,以及如何在不删除
this.setState
函数中的
editData
引用的情况下修复它,因为我需要它们来显示错误消息

更新

amrs技术人员的回答解决了我的问题,在
editData
中将
this.setState={…}
更改为
this.setState({…})
使它工作。希望对以后的人有用

if (this.setState.tableData1 !== "" && this.setState.tableData2 !== "")
这是不正确的。应该是这样的:

if (this.state.tableData1 !== "" && this.state.tableData2 !== "")
async editData() {
        var validationSummary = []

        if (this.state.tableData1 !== "" && this.state.tableData2 !== "") {
            this.setState ({
                validationSummary: [], //clear summary
                isSubmitting: true
            })

            let response = await fetch('http://localhost:5000/api/somecontroller/editroute', {
                method: "POST",
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify({
                    data1: tableData1,
                    data2: tableData2
                })
            });

            if (response.status !== 200) {
                validationSummary.push("Something went wrong")
                this.setState ({
                    validationSummary: validationSummary,
                    isSubmitting: false
                })
            }

            else {
                await this.getData()
            }
        }

        else {
            validationSummary.push("Inputs cannot be empty")
            this.setState ({
                validationSummary: validationSummary,
                isSubmitting: false
            })
        }
    }

您的编辑数据应该如下所示:

if (this.state.tableData1 !== "" && this.state.tableData2 !== "")
async editData() {
        var validationSummary = []

        if (this.state.tableData1 !== "" && this.state.tableData2 !== "") {
            this.setState ({
                validationSummary: [], //clear summary
                isSubmitting: true
            })

            let response = await fetch('http://localhost:5000/api/somecontroller/editroute', {
                method: "POST",
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify({
                    data1: tableData1,
                    data2: tableData2
                })
            });

            if (response.status !== 200) {
                validationSummary.push("Something went wrong")
                this.setState ({
                    validationSummary: validationSummary,
                    isSubmitting: false
                })
            }

            else {
                await this.getData()
            }
        }

        else {
            validationSummary.push("Inputs cannot be empty")
            this.setState ({
                validationSummary: validationSummary,
                isSubmitting: false
            })
        }
    }
希望它能起作用。您还可以参考React状态和生命周期的一些详细信息


另一种快速解决此问题的方法是将“this”保持为变量

async getData() {
var scope = this;
        return fetch("http://localhost:5000/api/somecontroller/getroute")
            .then(response => response.json())
            .then(data => {
                scope.setState({ // scope replace 'this' here

我不知道你做得对不对。我希望声明和定义您将使用的状态变量
this.state={}
this.state.
要设置状态值,您可以使用如下函数:
this.setState({:})
editData
setState
视为函数时的变量。您将setState视为变量而不是函数。。不要使用此
this.setState={validationSummary:[],//清除摘要问题提交:true}
尝试以下方法:
this.setState({validationSummary:[],//清除摘要问题提交:true})
可能重复@amrs tech这是我的一个输入错误,我已经更新了原始代码中的问题this.state.variable啊,是的,对不起,这只是一个输入错误实际上是this.state.variable在我的原始代码中,我将更新问题yes!将
this.setState={}
更改为
this.setState({})
解决了它,谢谢。很高兴它有帮助:)