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,它将继续打印在这种情况下,状态必须覆盖代码中的某个地方