Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么要这样分配变量?_Javascript_Reactjs - Fatal编程技术网

Javascript 为什么要这样分配变量?

Javascript 为什么要这样分配变量?,javascript,reactjs,Javascript,Reactjs,我甚至不知道它的名字,因此它的名字 我基本上是通过加载通过道具传递的数据(用于编辑)或加载空结构(用于创建新条目)来初始化模态表单: 主要思想是在提交表单后再次使用this.defaultStruct重置表单 但是,当我在提交后执行console.log(this.defaultStruct)时,我可以看到它实际上已经填充了表单状态的数据。所以见鬼 handleSubmit(e){ if(e){e.preventDefault();} $.ajax({ url:

我甚至不知道它的名字,因此它的名字

我基本上是通过加载通过道具传递的数据(用于编辑)或加载空结构(用于创建新条目)来初始化模态表单:

主要思想是在提交表单后再次使用this.defaultStruct重置表单

但是,当我在提交后执行console.log(this.defaultStruct)时,我可以看到它实际上已经填充了表单状态的数据。所以见鬼

handleSubmit(e){
    if(e){e.preventDefault();}
    $.ajax({
        url: this.state.question.id == null ? this.props.applicationData.routes.questionsCreate : this.props.applicationData.routes.questionsUpdate,
        dataType: 'json',
        contentType: 'application/json',
        type: 'POST',
        data: this.digestDataForStupidRails('question', 'options'),
        success: function(data) {
            console.log(this.defaultStruct)
        }.bind(this),
        error: function(xhr, status, err) {

        }.bind(this)
    });
}
控制台输出:

{
    "question": {
        "text": "preg 1",
        "active": true,
        "options": [
            {
                "text": "preg 1 a 1",
                "correct": false,
                "position": 0,
                "_destroy": false
            },
            {
                "text": "preg 1 a 2",
                "correct": true,
                "position": 1,
                "_destroy": false
            }
        ]
    }
}
当然,我可以通过使用函数来解决这个问题,并使它每次返回一个空结构,但这让我好奇


有人能解释这种行为吗?

这不是特定的反应,而是javascript(或基本上任何类似的语言)的工作方式。
defaultStruct
是一个对象,因此它通过引用传递,而不是作为新副本传递。如果您想保留
getInitialState
,您应该找到一种方法,例如,根据喜欢的答案中的建议,或者使用已经具有此功能的库,或者类似的方法。或者,由于您已经在使用jquery,您可以使用
$.extend
,正如第一个链接的第二个答案所回答的那样。

这不是特定的反应,而是javascript(或基本上任何类似的语言)的工作方式。
defaultStruct
是一个对象,因此它通过引用传递,而不是作为新副本传递。如果您想保留
getInitialState
,您应该找到一种方法,例如,根据喜欢的答案中的建议,或者使用已经具有此功能的库,或者类似的方法。或者,由于您已经在使用jquery,您可以使用
$.extend
,正如在第一个链接的第二个答案中所回答的那样。

哦,现在我对javascript有了更多的了解,谢谢!哦,现在我对javascript有了更多的了解,谢谢!
{
    "question": {
        "text": "preg 1",
        "active": true,
        "options": [
            {
                "text": "preg 1 a 1",
                "correct": false,
                "position": 0,
                "_destroy": false
            },
            {
                "text": "preg 1 a 2",
                "correct": true,
                "position": 1,
                "_destroy": false
            }
        ]
    }
}