Javascript 推动反应状态数组
我想用setState而不是this.state.floors.push来写,因为我知道这是一种不好的做法,但我想不出来。我用的是react nativeJavascript 推动反应状态数组,javascript,arrays,reactjs,react-native,Javascript,Arrays,Reactjs,React Native,我想用setState而不是this.state.floors.push来写,因为我知道这是一种不好的做法,但我想不出来。我用的是react native FloorAPI.getFloorsByBuildingID(this.state.buildingID).then((response) => response.d.data.map((value) => { console.log(value.floorName) this.state.floors.push({val
FloorAPI.getFloorsByBuildingID(this.state.buildingID).then((response) => response.d.data.map((value) => {
console.log(value.floorName)
this.state.floors.push({value: value.floorName})
}))
你可以用
this.setState({floors: [{value: value.floorName}]});
为了使用设置状态。您可以创建一个新的变量并推送到该变量,然后在映射完成后设置状态
// Create a new array based on current state:
let floors = [...this.state.floors];
// Add item to it
floors.push({ value: floorName });
// Set state
this.setState({ floors });
var tempArray = []
FloorAPI.getFloorsByBuildingID(this.state.buildingID).then((response) => response.d.data.map((value) => {
tempArray.push({value: value.floorName})
}))
this.setState({floors: tempArray})
您始终可以使用上一个状态
setState((prevState)=>({
floors: prevState.floors.push({...})
});
这是避免直接改变状态的好方法。另一种方法是执行以下操作:
var newState=[...this.state.floors];
newState.push({...});
setState(()=>({
floors: newState
)}
就目前而言,最好且最简单的方法是
this.setState(previousState => ({
floors: [...previousState.floors, {"value": value.floorName}]
}));
在形式上,你可以使用
setState((prevVals) => [...prevVals,newVals])
这在某种程度上是可行的,但它只在数组中放置了一个项目,我需要所有的楼层都在这个数组中,因为它将填充一个下拉菜单。简单且有效,谢谢。虽然这三个阶段是什么,但为什么需要这样做呢?对我来说,这有点奇怪,但
…
是一个叫做“解构”的概念的一部分:最有意义的编码。这可能是两种解决方案的混搭。在第一种解决方案中,您不应该修改prevState.floors
,这是push
所做的,而在第二种解决方案中,如果您正在生成一个不使用回调的state
参数的对象,则无需将回调传递给setState
。谢谢!现在不允许我修改prevState。现在,当你指出它时,我明白了它的原因。我得到了错误类型错误:传播非iterable的无效尝试instance@RayCoder获取TypeError的原因:传播不可iterable实例的尝试无效
,因为用于析构函数的数据不是数组,它不可iterable的原因以及你出错的原因。
const { floors } = this.state;
// Add item to it
floors.push({ value: 5 });
// Set state
this.setState({ floors });
setState((prevVals) => [...prevVals,newVals])