2016-10-17 14 views
0

У меня есть компонент, действие и магазин, используя React & Flux.[React] [flux] [EventEmitter] эта ссылка изменяется в компоненте для хранения ref

Когда я отправляю событие из Хранилища в метод в моем компоненте, «этот» ref в моем компоненте изменяется на «Сохранить», ссылка.

У вас есть какие-либо идеи, почему это происходит?

Магазин диспетчерская событие здесь, в getAllVotes() метод: https://huit.re/voteStoreRow41

import { EventEmitter } from 'events'; 

import dispatcher from '../dispatcher/dispatcher.jsx'; 
import request from 'superagent'; 
import nocache from 'superagent-no-cache'; 

const BASE_URL = "http://odu.priv/ws"; 

class VoteStore extends EventEmitter { 
    constructor(){ 
     super() 
     this.votes = []; 
     this.voteComponent = {}; 

     dispatcher.register(this.handleActions.bind(this)); 
    } 

    getAll(){ 
     return this.votes; 
    } 

    setVotes(listVote){ 
     this.votes.push(listVote); 
     this.emit('change'); 
    } 

    getAllVotes(){ 
     this.emit('change'); 
    } 

И компонент обработки этого события здесь: https://huit.re/votesL33 где «это» изменения в исх voteStore находится в updateVote() метод ,

import React from 'react'; 

import { Vote } from '../vote/vote.jsx'; 
import voteStore from '../../stores/voteStore.jsx'; 

import { getAllVote } from '../../actions/voteActions.jsx'; 

class Votes extends React.Component { 
    constructor(props) { 
    super(props); 
    console.log('const -> ', voteStore); 
    this.state = { 
     votes : voteStore.getAll() 
    }; 
    } 

    componentWillMount() { 
    voteStore.on('change', this.updateVote); 
    getAllVote(); 
    console.log("Votes ", this.state.votes); 
    } 

    /*componentWillUnmount() { 
    voteStore.removeListener('change',this.updateVote); 
    }*/ 

    updateVote(){ 
    console.log('this -> ',this); 
    console.log('voteStore -> ',voteStore) 
    this.setState({ 
     votes : voteStore.getAll() 
    }); 
    console.log('this.state',this.voteComponent.votes); 
    } 

То, что я просто не понимаю, почему мой «это» ссылка, если не мой экземпляр «голоса» больше, как только «getAllVotes()» метод называется в магазине. Это приводит к тому, что «this.state» в следующей строке не определен.

Заранее спасибо.

+0

Вы должны размещать минимальное представление о проблеме здесь, а не сторонний сайт, который может измениться или исчезнуть завтра. – Rob

+0

Обе ссылки указывают на одну и ту же строку. Странный. Пожалуйста, уточните –

+0

@Rob извините об этом. Я обновил контент. Маленькие ссылки указывают на мой личный репозиторий Git. Без сомнения, это не исчезнет завтра ...;) Я просто, хотя было бы проще прямо показать правильно отформатированный код, который можно клонировать для получения полной информации. – Olivier

ответ

0

проблема возникает из вашего класса Голосовать при добавлении eventListener, который вы вызываете this.updateVote, вы должны вызвать эту функцию таким образом this.updateVote.bind(this), как вы вызываете функцию из вашей виртуальной DOM.

 Смежные вопросы

  • Нет связанных вопросов^_^