2015-03-03 14 views
8

Sto provando a configurare l'app di base in Flux-React. Il suo unico obiettivo è quello di attivare un'azione, che viene inviata attraverso il Dispatcher a un negozio che si è registrato con il Dispatcher. Il negozio registra l'payload nella Console.React-Flux: Errore con AppDispatcher.register

Tutto oltre Store funziona bene, ma non appena colpisce AppDispatcher.register, Flux tiri il seguente errore:

Uncaught TypeError: Cannot set property 'ID_1' of undefined 

ecco il codice del file che causa l'errore, ma ho messo su l'intero progetto a https://github.com/bengrunfeld/react-flux-dispatcher-error, e si può trovare il file incriminato in src/js/stores/AppStores.js

var AppDispatcher = require('../dispatcher/AppDispatcher'); 
var EventEmitter = require('events').EventEmitter; 
var AppConstants = require('../constants/AppConstants'); 
var assign = require('object-assign'); 


var CHANGE_EVENT = 'change'; 

var AppStore = assign({}, EventEmitter.prototype, { 
    emitChange: function() { 
    this.emit(CHANGE_EVENT); 
    } 
}); 

AppDispatcher.register(function(payload){ 
    console.log(payload); 
    return true; 
}) 

module.exports = AppStore; 
+0

Fino votato video di YouTube, domanda e rispondi qui :) In attesa di un altro video. –

+0

Grazie per il tutorial. È grande. La tua versione originale sta funzionando, ma quando la faccio mia. Devo spostare il callback del registro su AppDispatcher.js, non su AppStore.js. Vedi di più qui: https://github.com/kenpeter/simplest-flux – kenpeter

+0

ciao - come aggiornerei la vista principale piuttosto che spingere su un console.log? Quindi, diciamo ogni volta che ho fatto clic sul pulsante che ha preso in un altro record da un file JSON ed emesso sullo schermo? evviva – Dan

risposta

18

a causa della siccità della documentazione di proporzioni bibliche per Facebook Flux, non sapevo che stavo usando il codice da versione precedente.

In AppDispatcher.js, è necessario definire AppDispatcher nel seguente modo utilizzando la parola chiave new:

var Dispatcher = require('flux').Dispatcher; 
var assign = require('object-assign'); 

var AppDispatcher = assign(new Dispatcher(), { 
    handleViewAction: function(action) { 
    this.dispatch({ 
     source: 'VIEW_ACTION', 
     action: action 
    }); 
    } 
}); 

module.exports = AppDispatcher; 

Ecco un link ad un repository con il codice di lavoro: https://github.com/bengrunfeld/react-flux-simple-app

+0

Non sicuro che chiamerei http://facebook.github.io/flux/docs/overview.html# contento di una siccità, esattamente. – fisherwebdev

+6

Definitivamente lo chiamerei così. Vai su Youtube e mostrami * un * tutorial su come creare una semplice applicazione usando Flux. Inoltre, anche se c'è sicuramente una documentazione ufficiale su Flux, non è intuitivo e scritto per ingegneri esperti che semplicemente "ottengono", non per gli ingegneri più giovani che hanno bisogno di più mani. Quindi [@rynclark] (https://twitter.com/rynclark) il commento di "- Se sei come me e volevi andare oltre con React, probabilmente avresti controllato Flux, un'occhiata, chiusa la scheda e poi rivalutata la tua vita come sviluppatore Javascript. " – Ben

+1

@fisherwebdev - Nel primo tutorial, un blocco di codice ha * 86 righe di codice *. In che modo qualcuno (specialmente un nuovo o junior dev) dovrebbe mantenere un tale codice nella propria testa mentre sta imparando una nuova struttura, tentando di comprendere i concetti sottostanti e imparando come usarlo praticamente? È semplicemente intimidatorio. Per favore, permettimi di riscrivere i tuoi documenti e il tuo utente triplicherà tra una settimana. – Ben