ค้นหาเว็บไซต์

javascript - TypeError ที่จับไม่ได้: ไม่สามารถเพิ่มคุณสมบัติ 12 ได้ วัตถุไม่สามารถขยายได้


ฉันดูเหมือนจะไม่สามารถเข้าใจข้อผิดพลาดที่ฉันได้รับในแอปพลิเคชันไคลเอนต์ของฉันได้ ฉันกำลังสมัครสมาชิกกับการสมัครสมาชิก graphql และฉันสามารถดึงการอัปเดตได้ แต่ฉันไม่สามารถส่งการเปลี่ยนแปลงไปยังอาร์เรย์ typescript ที่เรียกว่า "models:ModelClass[]" ซึ่งถูกผูกกับมุมมองได้

มีอะไรที่ฉันพลาดหรือต้องทำผิดหรือไม่?

models.component.ts

this.apollo.subscribe({
  query: gql`
    subscription {
      newModelCreated{
        _id
        name
        type
        train_status
        deploy_status
        data_path
        description
        created_at
        updated_at
      }
    }
  `
}).subscribe((data) => {
  console.log("CREATED: " + JSON.stringify(data.newModelCreated));
  console.log(data.newModelCreated);
  var temp:ModelClass = data.newModelCreated;
  this.models.push(temp);
});

model-class.ts

export interface ModelClass {
    _id: string;
    name: string;
    type: string;
    parameters: {
        alpha: number;
    };
    train_status: string;
    deploy_status: string;
    test_accuracy: string;
    created_at: number;
    updated_at: number;
}

คำตอบ #1

ผมคิดว่า this.models คืออาเรย์ที่ถูกส่งกลับมาจาก Apollo และคุณต้องการเพิ่มวัตถุที่สร้างใหม่ไปยังอาเรย์เริ่มต้นของคุณใช่ไหม? ถ้าใช่ Apollo จะส่งกลับเป็นวัตถุที่ไม่สามารถเปลี่ยนแปลงได้!

คุณต้องทำการโคลนอาเรย์ที่ส่งกลับมาเริ่มแรก บางอย่างเหมือนในฟังก์ชัน subscribe:

this.apollo
    .watchQuery({query: INITIAL_GQL_REQUEST})
    .subscribe((data) => {
        this.models = data.models.map((model) => {
            return {
                id: model.id, 
                name: model.name,
                another: model.another
            }
        })
    };
});

จากนั้นคำขอสมัครของคุณจะสามารถเพิ่มโมเดลที่สร้างขึ้นไปยังอาเรย์จาวาสคริปต์ธรรมดานี้ได้

ป.ล.: ไม่แน่ใจ แต่ฉันคิดว่า Apollo จะส่งคืนวัตถุที่ไม่สามารถเปลี่ยนแปลงได้เพราะพวกมันถูกเก็บในสโตร์ และขึ้นอยู่กับนโยบายการดึงข้อมูลของคุณ มันอาจพลาดการเข้าใช้สโตร์หากคุณสามารถแก้ไขพวกมันได้

หวังว่าจะช่วยได้นะ

บทความที่เกี่ยวข้อง