проблема с переинициализацией массива в состоянии - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь использовать содержимое массива. Поскольку каждый элемент используется, я удаляю его и продолжаю использовать массив.

Проблема заключается в том, что когда я хочу переопределить массив с остальной частью этого массива, он не работает, когда я использую setState, но когда я касаюсь непосредственно массива, все в порядке. Можете ли вы сказать мне, в чем проблема в моей программе?

спасибо за помощь.

этот код в порядке, но я касаюсь непосредственно к состоянию

class test extends PureComponent {

constructor(props) {
    super(props)
    this.state = {
        arrayToUse: listdata
    }
}

UseArray = async () => {

    console.log("initArray", this.state.arrayToUse)
    console.log("arrayLength", this.state.arrayToUse.length)

    while (this.state.arrayToUse.length > 0) {

        console.log("while - step1", this.state.arrayToUse)
        console.log("while - step2", this.state.arrayToUse[0].name)

        this.state.arrayToUse = this.state.arrayToUse.slice(1)

    }

Этот KO: почему?

class test extends PureComponent {

constructor(props) {
    super(props)
    this.state = {
        arrayToUse: listdata
    }
}

UseArray = async () => {

    console.log("initArray", this.state.arrayToUse)
    console.log("arrayLength", this.state.arrayToUse.length)

    while (this.state.arrayToUse.length > 0) {

        console.log("while - step1", this.state.arrayToUse)
        console.log("while - step2", this.state.arrayToUse[0].name)

        let nextState = this.state.arrayToUse.slice(1)

        this.setState({
            arrayToUse: nextState
        })

    }

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

Попробуйте объявить и установить состояние вне времени, пока l oop?

Каждый раз, когда вы вызываете setstate, он будет повторяться один раз, я не уверен, будет ли он работать верно? Но вы можете попробовать что-то вроде этого ниже или просто объявить и отключить при использовании вашего кода.

UseArray = async () => {

    console.log("initArray", this.state.arrayToUse)
    console.log("arrayLength", this.state.arrayToUse.length)
    let nextState = this.state.arrayToUse;
    while (nextState.length > 0) {

        console.log("while - step1", nextState)
        console.log("while - step2", nextState[0].name)

        nextState = nextState.slice(1);
    }
    // out of while
    this.setState({
        arrayToUse: nextState
    })
}
0 голосов
/ 28 апреля 2020

Попробуйте:

let nextState = this.state.arrayToUse

nextState.slice(1);

this.setState({
     arrayToUse: nextState
})

Таким образом вы убедитесь, что работаете с копией массива, а не с реальным массивом.

...