2017-04-23 1 views
1

Immutable.js에 대한 문서는 React.js에서 setState를 사용하여 상태를 올바르게 변경하는 방법을 충분히 명확히하지 않습니다.React에서 Immutable.js로 상태 변경

나는 다음과 같은 기능을 가지고 :

createComment(comment) { 

    const comments = Immutable.fromJS(this.state.comments); 
    var tempList = comments.concat({ 
     text: comment, 
     isAdmin: false 
    }); 
    this.setState({ comments: tempList.toJS() }); 

} 

그것은 않습니다 작동하지만 문제는 데이터가 더 이상 불변이라고하지 않습니다 당신은 Immutable.js를 사용하는 목적,하지만 일을 패배하는이 작업을 수행 할 때 당신이 변경할 수없는 객체를 setState 함수에 전달할 수 없다는 것입니다. 그러면 어떻게해야할까요?

comment.get is not a function 

답변

0

당신은이 책의 : Immutable as React state

은 내가 오류를 얻을 수 있기 때문에 데이터가 더 이상 불변 알 수 없습니다. .toJS()으로 전화 할 필요가 없습니다.

완전히 괜찮 :의 반작용와 setState의 API가 함께 객체 리터럴 예상과 (Object.assign)를 병합하기 때문에 상태가, 일반 JS 객체, 그리고 불변의 컬렉션을해야한다는

const comments = Immutable.fromJS(this.state.comments); 
var tempList = comments.concat({ 
    text: comment, 
    isAdmin: false 
}); 
this.setState({ comments: tempList }); 
+0

주 이전 상태. – amd

+0

예'this.setState ({comments : tempList})'; 하지만'this.setState (tempList);는 불변 목록을 받기 때문에 작동하지 않습니다. github에 대한 예제에서는'.toJS()'를 사용하지 않습니다. –

+0

주석은 변경 불가능한 객체입니다. 그것은 아마도 작동하지 않을 수 있습니다. – amd