Internamente, React utilizza un'utilità chiamata ExecutionEnvironment
per questo. Implementa alcune proprietà utili come canUseDOM
e canUseEventListeners
. La soluzione è essenzialmente solo ciò che è suggerito here.
L'attuazione di canUseDOM
var canUseDOM = !!(
(typeof window !== 'undefined' &&
window.document && window.document.createElement)
);
Io uso questo nella mia domanda come questa
var ExecutionEnvironment = require('react/node_modules/fbjs/lib/ExecutionEnvironment');
...
render() {
<div>{ ExecutionEnvironment.canUseDOM ? this.renderMyComponent() : null }</div>
}
EDIT Questa è una funzionalità non documentata che non deve essere utilizzato direttamente. La posizione cambierà probabilmente da versione a versione. Ho condiviso questo come un modo per dire "questo è il meglio che puoi fare" mostrando ciò che il team di Facebook usa internamente. Potresti voler copiare questo codice (è minuscolo) nel tuo progetto, quindi non devi preoccuparti di stare al passo con la sua posizione dalla versione alla versione o potenziali cambiamenti di rottura.
UN ALTRO MODIFICA Qualcuno ha creato un codice npm package per questo codice. Suggerisco di usarlo.
npm install exenv --save
fonte
2015-09-16 02:37:28
Non potresti controllare alcuni globali come 'window', o' process'? – elclanrs
simile: http://stackoverflow.com/a/13644360/251311 – zerkms
grazie @elclanrs e @zerkms. Questa è stata la prima cosa che ho pensato, ma stavo cercando 'if (windows) {}' mentre dovrei effettivamente fare 'typeof window'. –