我正在学习React,并且在我的项目中安装了ESLint。它开始给我一些错误,比如:
在setState中引用之前的状态react/no access状态时,在setState中使用回调
在我的React组件中,我有一个构造函数:
constructor() {
super()
this.state = {
currentIdVehicle: null,
currentIdModel: null,
currentIdVehicleFinal: null,
marca: [],
veiculo: [],
modeloEAno: [],
vehicleFinal: [],
infoTable: [],
};
}
在我的职能中,我有:
getMarca = () => {
this.setState({ marca: [], veiculo: [], modeloEAno: [] });
api.get(`/marcas.json`).then(res => {
res.data.map((item) => {
const joined = this.state.marca.concat([
{ name: item.name, id: item.id },
]);
this.setState({ marca: joined });
});
});
};
我理解在setState
中使用this.state
是不正确的,但我如何解决此错误?
如果必须改变状态(例如添加项目),则可以将函数传递到setState
,该函数接收上一个状态并返回下一个状态:
this.setState(previousState => ({ marca: [...previousState.marca, { name: item.name, id: item.id }] }));
一次添加所有项目会更快,不过:
this.setState(previousState => ({
marca: [
...previousState.marca,
...res.data.map((item) => ({ name: item.name, id: item.id }))
],
}));
而不是这样:
res.data.map((item) => {
const joined = this.state.marca.concat([
{ name: item.name, id: item.id },
]);
this.setState({ marca: joined });
});
这样做:
res.data.map((item) => this.setState(prevState => {
const joined = prevState.marca.concat([
{ name: item.name, id: item.id },
]);
return({ marca: joined });
}));
您不应该直接或间接引用this.state
在您最终传递给this.setState
的内容中。
问题内容: 好的,我会尽快解决这个问题,因为它应该很容易解决… 我读过很多类似的问题,答案似乎非常明显。首先,我不需要查找任何内容!但是…我有一个错误,我无法理解如何修复或为什么会发生。 如下: 与此相关的代码更多,但这就是我的问题所在。应该工作吧? 我也尝试过这个: 所以我有这两个,两者应该相同。我实际上是将状态设置为与其上方的行相同! 但是它总是返回与应有的相反的结果。 我用的时候也一样; 如
好吧,我会尽快解决的,因为这应该是一个很容易的解决办法... 我读过一堆类似的问题,答案似乎相当明显。从一开始我就不用抬头看了!但是...我有一个错误,我无法理解如何修复或为什么它会发生。 具体如下:
问题内容: 我的Express Server中有这个。 调用此函数: 正在调用courtsAmount函数。但是,在我的客户看来,我没有得到重用。相反,我只是得到一个空对象。 我认为这与我有一个回调有关,因此在实际触发之前发送了一个空对象。 我该如何解决这个问题? 问题答案: 您的courtsAmount不返回任何内容。相反,您应该在其中使用回调(或Promise)来执行以下操作: 和
问题内容: React有一个叫做useState的钩子,在向功能组件添加状态时使用。 该挂钩API参考状态: useState : 返回一个有状态值,以及一个更新它的函数。 在初始渲染期间,返回的状态()与作为第一个参数()传递的值相同。 该功能用于更新状态。它接受一个新的状态值并排队重新呈现组件。 该阵营文档状态: 作为论点我们要传递什么? 挂钩的唯一参数是初始状态。与类不同,状态不必是对象。如
问题内容: 我正在阅读reactjs文档的Forms部分,只是尝试了这段代码来演示用法(JSBIN)。 在浏览器中更新值时,回调内的第二个与第一个相同,为什么在回调范围内看不到结果? 问题答案: 从React的文档中: 不会立即变异,但会创建待处理的状态转换。调用此方法后进行访问可能会返回现有值。无法保证对呼叫的同步操作,并且可以为提高性能而对呼叫进行批量处理。 如果要在状态更改发生后执行某个函数
问题内容: 我正在使用托管在Google App Engine上的Java,Jetty和Jersey 2.18(目前最新)。 假设我有一项服务 当我做: 我正确地收到了一个application / json内容类型和主体。但是当我这样做时: 与返回任何4XX或5XX状态相同,我收到一个text / html内容类型以及以下HTML正文: 而不是我放入.entity()的对象 编辑:这是我的web