Javascript 无法在当前状态下更新阵列
这是我的密码。但当我试图打印数组时,它打印的是空数组Javascript 无法在当前状态下更新阵列,javascript,reactjs,react-native,Javascript,Reactjs,React Native,这是我的密码。但当我试图打印数组时,它打印的是空数组 class FlatListItem extends Component{ constructor(props){ super(props) this.state={ markers:[], } } changeSelectStatus=(key)=>{ this.setState(prevState => ({
class FlatListItem extends Component{
constructor(props){
super(props)
this.state={
markers:[],
}
}
changeSelectStatus=(key)=>{
this.setState(prevState => ({
markers: [...prevState.markers, key]
}))
console.log(this.state.markers)
}
}
我想把所有的键都放到标记数组中,并在控制台(远程调试器)中打印出来。设置状态是一个异步函数,如果你想看到状态的变化,你可以通过回调来查看状态的变化
class FlatListItem extends Component{
constructor(props){
super(props)
this.state={
markers:[],
}
}
changeSelectStatus=(key)=>{
this.setState(prevState => ({
markers: [...prevState.markers, key]
}), () => console.log(this.state.markers) )
}
}
您的控制台日志是在状态更改之前生成的,以查看您的代码是否正常工作。也许您应该更改控制台日志位置 范例
this.setState(prevState => ({
markers: [...prevState.markers, key]
}), () => console.log(this.state.markers))
如果在应用代码后状态没有改变
也许你可以试试这个
changeSelectStatus(key) {
let x = this.state.markers
x.push(key)
this.setState({ markers = x }, () => console.log(this.state.markers))
}
您可以在设置状态时使用
wait
,如
fillArray = async () => {
await this.setState(prevState => ({
marker: [...prevState.marker, { id: 1, name: 'change' }],
}));
console.log(JSON.stringify(this.state.marker));
};
请检查此处的
设置状态
是否为,使用控制台回调什么是coe中的键?设置状态
不是同步函数,因此,您将无法立即记录statekey与所选项目的id类似。@DhavalPatel按下按钮后,相关id将作为参数发送给函数。@CharanrajhPepakayala检查我的答案这不起作用。这将重置以前的值。This.setState(prevState=>({markers:[…prevState.markers,key]}),因为您正在设置以前的状态(空数组)在changeSelectStatus中,它为您提供了相同的状态…..标记数据的来源是什么?是来自props还是api响应?键来自静态数据对象。无论如何,我们正在更新标记数组,否?这是否反映在下一个事件调用中?否…最初,上一个状态表示您初始化的状态在构造函数中,无论调用changeSelectStatus多少次,前一个状态都将被重新分配到该状态……由于标记值来自静态数据对象,因此您应该将其作为来自父对象的道具向下发送,并在此处将其设为标记:[……props.markers,key]或者导入静态数据对象并使用该变量设置状态…这不起作用。这也会重置以前的值。但是,当我连续发送同一个键时,以前的值不会被擦除。假设我通过6 5次,下次控制台打印6 6时,如果我通过2,它将继续打印在这种情况下,状态必须覆盖代码中的某个地方