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