>

"반응": "^ 16.4.1", "react-dom": "^ 16.4.2", "react-redux": "^ 5.0.7", "redux": "^ 4.0.0", "redux-thunk": "^ 2.3.0", "webpack-dev-server": "^ 3.1.5"

const items = this.props.cart.cartItems;
const index = items.indexOf(item1);
items.splice(index, 1);
this.setState({ finalPrice: 0 });

이 시나리오에서 소품 'cartItems'는 조치를 전달하지 않고 변수 '항목'으로 업데이트됩니다.


  • 답변 # 1

    딥 카피를 수행하지 않고 다른 객체에서 복사 한 객체의 객체 속성을 변경했기 때문입니다. 따라서 중첩 속성을 변경하면 원본 객체도 변경됩니다. 딥 카피를 만들거나 객체를 변경하지 않고 객체를 변경하십시오.

    한 개체를 다른 개체에 할당해도 딥 카피를 수행하지 않으면 완전히 다른 개체가 만들어지지 않습니다. 두 객체 참조 모두 동일한 객체를 가리 킵니다.

    splice  원래 배열을 변경합니다. slice 를 사용하십시오  또는 filter 와 같은 다른 방법 .

    const cart = {
      cartItems: [
        "foo", "bar", "baz"
      ],
    }
    console.log( "original one before update", cart.cartItems );
    const index = cart.cartItems.indexOf("foo");
    const items = cart.cartItems.filter( (_, i) => i !== index );
    console.log( "original one after update", cart.cartItems );
    console.log( "new items", items );
    
    

관련 자료

  • 이전 java - Google Maps API에서 확대/축소 수준을 기준으로 상점 표시
  • 다음 rust - 열거 형을 사용하여 다형성을 에뮬레이트하거나 Box 와 함께 특성을 사용해야합니까?