2014-09-14 4 views
2

J'essaie de réagir et de réagir au chargement du routeur dans mon application via require. Je dois suivre la configuration de shim, mais je reçois toujours une erreur où le routeur de réaction n'obtient pas un objet React approprié.Pourquoi cette plaquette RequireJS ne fonctionne-t-elle pas pour le routeur de réaction?

paths: { 
    domReady:  '../lib/requirejs-domready/domReady', 
    react:   '../lib/react/react', 
    'react-router': '../lib/react-router/dist/react-router' 
    }, 
    shim: { 
    'react':  { 
     exports: 'React' 
    }, 
    'react-router': { 
     deps: ['react'], 
     exports: 'ReactRouter' 
    } 
    } 

    require(['domReady!', 'react', 'react-router'], ... 


Uncaught TypeError: Cannot read property 'createClass' of undefined react-router.js:372 
../utils/withoutProperties react-router.js:1 
s react-router.js:1 
(anonymous function) react-router.js:62 
./Route react-router.js:1 
s react-router.js:1 
(anonymous function) react-router.js:886 
./actions/LocationActions react-router.js:1 
s react-router.js:1 
e react-router.js:1 
(anonymous function) require.js:1658 
context.execCb require.js:874 
Module.check require.js:1151 
Module.enable require.js:782 
Module.init require.js:1178 
callGetModule require.js:1552 
context.completeLoad require.js:1679 
context.onScriptLoad 

Tout est installé via Bower. React est 0.11.1, le routeur est 0.7.0

+0

Avez-vous utilisé 'bower' pour installer' react-router'? – Vikram

+0

@Vikram oui, je l'ai fait. –

Répondre

10

Il apparaît dans la source que le routeur de réaction ne fonctionnera que si window.React ou global.React sont définis. Réagir lui-même n'expose pas un objet global dans un environnement RequireJS. J'ai donc fini par écrire une cale.

paths: { 
    domReady:  '../lib/requirejs-domready/domReady', 
    react:   '../lib/react/react', 
    'react-router': '../lib/react-router/dist/react-router', 
    'react-router-shim': 'react-router-shim' 
}, 
shim: { 
    'react-router-shim': { 
    exports: 'React' 
    }, 
    'react-router': { 
    deps: ['react-router-shim'], 
    exports: 'ReactRouter' 
    } 
} 

réagir-routeur-shim:

define(['react'], function(React) { 
    "use strict"; 

    window.React = React; 
}); 

Je peux alors utiliser réagir et réagir comme routeur dépendances appropriées.

+0

J'ai fait ça. Mais l'optimiseur de requirejs ne peut pas fonctionner avec. Quand tout est regroupé, il me lance: '' 'Uncaught Error: application manquant react-router''' dans la console du navigateur. – Spoeken

+0

@Spoeken Désolé, je n'ai pas encore ajouté l'optimisation r.js au projet, donc je ne peux rien y faire. Si vous trouvez une solution, postez une réponse ou modifiez celle-ci. –

+0

Posté une question ici: http://stackoverflow.com/questions/28172896/missing-react-router-after-bundling – Spoeken

Questions connexes