2017-05-18 12 views
1

코드에서 @action을 사용하는 방법에 대해 혼란 스럽습니다.Mobx + reactjs에서 @Action을 사용하는 방법?

class Items { 

    @observable items= []; 

    @action addItem() { 
    let newItem= new Item(); 
    items.push(newItem); 
    } 
} 

@observer 
class ItemPage extends Component { 

    constructor() { 
    super(); 
    } 

    render() { 
    const {addItem} = this.props.store; 
    return (
     <div className="items"> 
     <input type="button" value="add" onClick={addItem}/> 
     </div> 
    ) 
    } 
} 

const store = new Items(); 

답변

1

하면 this.items뿐 아니라 items을 변경할 수 있는지 확인합니다.

class Items { 
    @observable items= []; 

    @action.bound 
    addItem() { 
    let newItem = new Item(); 
    this.items.push(newItem); 
    } 
} 

@observer 
class ItemPage extends Component { 
    render() { 
    const { addItem } = this.props.store; 
    return (
     <div className="items"> 
     <input type="button" value="add" onClick={addItem}/> 
     </div> 
    ); 
    } 
} 

const store = new Items(); 

또는를 : 당신은 또한 action.bound와 함께 작업 중 하나를 결합 또는 구성 요소에 바인딩 된 핸들러를 작성해야

class Items { 
    @observable items= []; 

    @action 
    addItem() { 
    let newItem = new Item(); 
    this.items.push(newItem); 
    } 
} 

@observer 
class ItemPage extends Component { 
    handleClick =() => { 
    this.props.store.addItem(); 
    }; 
    render() { 
    return (
     <div className="items"> 
     <input type="button" value="add" onClick={this.handleClick}/> 
     </div> 
    ); 
    } 
} 

const store = new Items(); 
+0

는 더 권장되는 방법 action.bound @ 있습니까? 만약 당신이 그것을 사용하지 않으면 진짜 이득을위한 방법을 복제하는 것 같아? – chobo2

+0

@ chobo2 정말 기본 설정으로 내려갑니다. 개인적으로 구성 요소에 핸들러를 만드는 경향이 있습니다 (예 : 나중에 조치를 호출하는 것 이상을 수행해야하므로 일반적으로 옵션 2를 사용합니다. – Tholle

+0

왜 그런지 일종의 더 많은 일처럼 보일뿐 실제 이익을 보는 것은 아닙니다. 또한 컴포넌트 자체에 @action을 두는 3 번째 옵션을 보았습니다. – chobo2