首页 > 解决方案 > 使用 for 循环和 setState 的动态状态数。然后需要在所有设置后使用状态

问题描述

动态状态数。状态的数量是动态的并且取决于这个mppt取决于用户输入的数量。我创建了状态,然后在 for 循环中创建了它们之后......我想用它做点什么。我通常会在回调中执行此操作,但我使用 for 循环来创建动态数量的状态。这会根据数量设置默认值和元素mppt数量。之后,它将由onChange.

const defaultValues = {
    1:{
        isc: 10.88,
power: 3834.5999999999995,
vmp: 497,
voc: 584.3312579999999,
se: 14,
st: 1,
    },


2: {isc: 9.00,
    power: 3834.5999999999995,
    vmp: 600,
    voc: 584.3312579999999,
    se: 12,
    st: 1},
}

const mppt = 2


.
.
.


   componentDidMount(){
        console.log('Sizing Mounted?')
        for(let i=1 ; i <= mppt ; i++){
            console.log(i)
            this.setState({ [`${i}`] : defaultValues[i]}, ()=>{
                console.log('state been set?')
                console.log(this.state[`${i}`]) //this works
            })
        }
        console.log('Check if state has been checked by here to feed into next function')
        console.log(this.state[`1`])  // undefined

        //This function uses the new set states 
        this.createElementDefaults()  //uses undefined state values

    }

setStates 的异步性质使这一点变得混乱。有什么建议么?

标签: reactjsasynchronoussetstate

解决方案


尝试先构建对象,将其设置为状态,然后在回调中使用您的功能:

  componentDidMount() {
    let s = {};
    for (let i = 1; i <= mppt; i++) {
      s[`${i}`] = defaultValues[i];
    }

    this.setState((prevState) => ({ ...s }), () => {
        console.log(this.state);
        this.createElementDefaults()
    });
  }

推荐阅读