【问题标题】:Dynamic # of states using for loop and setState . Then need to use states after all have been set使用 for 循环和 setState 的动态状态数。然后需要在所有设置后使用状态
【发布时间】:2020-12-18 20:04:05
【问题描述】:

状态的动态数量。状态的数量是动态的,取决于这个 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 的异步特性使这一点变得混乱。有什么建议吗?

【问题讨论】:

    标签: reactjs asynchronous setstate


    【解决方案1】:

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

      componentDidMount() {
        let s = {};
        for (let i = 1; i <= mppt; i++) {
          s[`${i}`] = defaultValues[i];
        }
    
        this.setState((prevState) => ({ ...s }), () => {
            console.log(this.state);
            this.createElementDefaults()
        });
      }
    

    【讨论】:

    • I'd be going from 1:{} , 2:{} --> s : {1 :{}, 2:{}} 状态信息将改变,但仅在 1 或 2或“n”随时。这不会要求我在更新 1, 2, ....n 时更新整个 's' 对象吗?我试图将它们分开。
    • 没关系,成功了!!!这个 {...s} 叫什么,我可以研究一下?
    • 在JS中称为展开运算符。您也可以将其视为对象解构。
    猜你喜欢
    • 2017-12-29
    • 2018-09-23
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 2019-07-26
    • 1970-01-01
    • 2019-06-06
    相关资源
    最近更新 更多