React setState呈现行为

时间:2017-08-09 09:19:02

标签: javascript reactjs

我有一个关于这两个选项的渲染行为的问题:

export function saveOrCancelStepContentComponents(stepIndex, targetArray, newArray) {
    // Option 1
    let stepsData = this.state.stepsData.slice();
    stepsData[stepIndex][targetArray] = newArray;

    this.setState({stepsData: stepsData}, () => {
        console.log("saveStepConditions[]:", this.state.stepsData[stepIndex][targetArray]);
    });

    // Option 2
    this.setState((prevState) => ({
        stepsData: prevState.stepsData.map((currentStep, i) => {
            if (i === stepIndex) {
                return {
                    ...currentStep,
                    [targetArray]: newArray,
                }
            }
            return currentStep
        })
    }), () => {
        console.log("saveStepConditions[]:", this.state.stepsData[stepIndex][targetArray]);
    });
}

取消和保存两种选项都可以,也就是说console.logs没问题。但是,只有选项2重新呈现页面。选择1将不会导致任何表型变化。 任何想法为什么会这样?谢谢!

1 个答案:

答案 0 :(得分:2)

这一行 uninst: ClearErrors ${getOPtions} $CMDLINE "--quiet" $0 ${IfNot} ${Errors} StrLen $2 "\Uninstall.exe /S" ${Else} StrLen $2 "\Uninstall.exe" ${EndIf} StrCpy $3 $0 -$2 # remove "\Uninstall.exe" ExecWait '$0 _?=$3' ;Do not copy the uninstaller to a temp file` 会改变stepsData[stepIndex][targetArray] = newArray;个对象而不是创建一个新对象。

应该是

stepsData[stepIndex]

与你在地图功能中的方式相同。