web-dev-qa-db-fra.com

Comment puis-je détecter que je suis sur le serveur vs client dans Next.js

J'utilise un serveur express client avec Next.js. Il fonctionne dans un conteneur. Je fais une demande http avec isomorphic-fetch pour obtenir des données pour mon rendu. Je voudrais faire localhost lors de l'exécution sur le serveur et mysite.com lors de l'exécution sur le client. Je ne suis pas sûr de la meilleure façon d'y parvenir. Je peux le faire piraté en faisant const isServer = typeof window === 'undefined' mais cela semble assez mauvais.

15
Dave Stein

Vous pouvez utiliser process.browser pour faire la distinction entre l'environnement serveur (NodeJS) et l'environnement client (navigateur).

process.browser est true sur le client et undefined sur le serveur.

25
saimeunt

Une note supplémentaire est que componentDidMount() est toujours appelé sur le navigateur. Je charge souvent l'ensemble de données initial (contenu de référencement dans getInitialProps(), puis charge plus de données en profondeur dans la méthode componentDidMount().

1
ForrestLyman

Puisque je n'aime pas dépendre de choses étranges de tiers pour ce comportement (même si process.browser semble provenir de Webpack ), je pense que la meilleure façon de vérifier est la présence de appContext.ctx.req comme ça:

async getInitialProps (appContext) {

    if (appContext.ctx.req) // server? 
    {
        //server stuff
    }
    else {
        // client stuff
    }
}

Source: https://github.com/zeit/next.js/issues/2946

0
Gezim