2017-05-20 12 views
0

私はサーバー側のレンダリングのアプリを持っています。ここでは、サーバー側のコードは次のとおりです。サーバーサイドレンダリングを行う前に、どのようにアクションを自分の店にディスパッチできますか? - Redux

export default (req, res, next) => { 
    const store = getStore(); 

    // HERE IS THE DISPATCH 
    getStore().dispatch(updateToken("TOKEN")); 

    match({ routes, location: req.url }, (err, redirect, props) => { 

     if (err) { 
      return next(err); 

     } else if (redirect) { 
      res.redirect(redirect.pathname + redirect.search) 

     } else if (props) { 

      resolveAsyncDeps(store, props) 
       .then(() => { 

        //HERE IS INITIAL STATE 
        const initialState = store.getState(); 

        const content = renderToString(
         <Provider store={store}> 
          <RouterContext {...props} /> 
         </Provider> 
        ); 

        res.send(
         minify(
          docTemplate({ 
           ...(Helmet.rewind()), 
           content, 
           initialState, 
           env: { DASHBOARD_REST_API, DASHBOARD_WS_API } 
          }), 
          { collapseWhitespace: true, removeAttributeQuotes: false } 
         ) 
        ); 
       }).catch(next); 



     } else { 
      res.status(404).send('Not Found') 
     } 
    }) 
} 

私のアクションが同期している:私storegetState()initialStateとして伝承する際

export function updateToken(token) { 
    return { 
    type: UPDATE_TOKEN, 
    payload: { 
     token 
    } 
    }; 
} 

しかし、私のtokenは状態ツリーではありません。 thunkなどのミドルウェアを使用していない限り、dispatchは同期していたと思いますか?私は何が欠けていますか?フロントエンドにプッシュする前に、initialStateに何かを追加するにはどうすればよいですか?

答えて

1

この特別なケースでは、getStoreは、ファクトリ関数 - アプリケーション固有の設定でReduxのcreateStoreを呼び出すファクトリ関数だと思います。

サーバー上では、すべてのユーザーに同じストアインスタンスを共有するように要求しない限り、各要求で新しいストアインスタンスを作成する必要があります。

コードスニペットを見てみると:

const store = getStore(); 

// HERE IS THE DISPATCH 
getStore().dispatch(updateToken("TOKEN")); 

あなたが要求ごとに2つのストアインスタンスを作成している、と店の間違ったインスタンスにupdateToken("TOKEN")アクションを派遣しているようですが表示されます。その要求で唯一のストアインスタンスへupdateToken("TOKEN")アクションを派遣する

const store = getStore(); 

// HERE IS THE DISPATCH 
store.dispatch(updateToken("TOKEN")); 

この:

代わりに、あなたはおそらくのような何かをしたいです。

関連する問題