反应一个对象的更新状态更改另一个对象

时间:2020-04-24 01:55:26

标签: javascript reactjs components

在我的组件中,两个对象基于这个json文件。但是,当我尝试更改一个对象的值时,另一个对象会自动更新。我如何只更改一个对象而不是另一个对象中字段的值。我的代码是

import React, { Component } from 'react';
import quest from './questions.json';

class Quest extends Component {

    constructor(){
        super();
        this.state = {
            questions: quest,
            keyquest: quest
        }
    }

    componentDidMount(){
        this.changequest(this.state.questions);
    }

    changequest(quests){
        quests.map((data) => {
            data.answer = 'changed value';
        })
        this.setState({questions: quests});
    }

    render() {
        console.log(this.state.questions[0].answer);
        console.log(this.state.keyquest[0].answer);
        return (
            <div>
                <h1>Test</h1>
            </div>
        );
    }
}
export default Quest;

两个console.log语句的输出是相同的“更改后的值”。我做错了。

1 个答案:

答案 0 :(得分:0)

您可以尝试在您的状态下对任务进行字符串化,然后使用changeQuest方法将其解析回去,这样您就不会变异同一个对象。

this.state = {
      questions: JSON.stringify(quest),
      keyquest: JSON.stringify(quest)
    };
changequest(quests) {
    const q = JSON.parse(quests);
    this.setState({
      questions: q.map(data => {
        data.answer = "changed value";
        return data;
      })
    });
  }