3

おそらくこれは非常に具体的な質問ですが、解決策を見つけることができると思います。ログイン/ログアウト後の環境変更について、多くの方からお問い合わせをいただいております。

私は redux を使用して、ログイン、モーダル、フォームなどに関するアプリの状態ロジックを保存し、データ取得のために中継しています。ログイン/ログアウト後、接続されたルーターを使用して、新しい環境で再レンダリングをトリガーしています

const RelayApp = connect(_ => ({
  routes: routes,
  environment: environment,
  history: browserHistory,
  render: applyRouterMiddleware(useRelay)
}))(Router);

ReactDOM.render(
  <Provider store={store}>
    <RelayApp />
  </Provider>,
  document.getElementById('root')
);

私は次のように定義されたルートを持っています:

export default (renderAppRoute) => (
  <Route render={renderAppRoute} path="/" component={App} queries={AppQueries} >
    <IndexRoute component={UserList} queries={UserListQueries}/>
    <Route path=":username" component={User} queries={UserQueries} />
  </Route>
);

renderAppRoute 関数は、フェッチが完了した場合など、さまざまなリレー状態で何をレンダリングするかを定義しています

const renderAppRoute = ({ done, props, element }) => {
  if(props) { //it's loaded
    React.cloneElement(element, props);
  }
  return <h1>Loading...</h1>;
};

env を変更した後、エラーが発生します(index):7 Uncaught TypeError: Cannot read property 'user' of undefined(…)。これは、最初のフェッチで props が定義されておらず、フェッチが進行中であるためです。props でフェッチが行われた後、RelayContainer などのフラグメント定義を見つけることができます。しかし、新しい環境に切り替えた後、props は決して未定義ではないため、コンポーネントをレンダリングしていますが、ストアにデータはありません。どういうわけか検出することは可能ですか、または環境が新しいかどうかを識別する方法はありますか、またはユーザー側でカスタムロジックを作成する必要がありますか?

私は現在、isNewEnvironment新しい環境を作成するときにtrueに設定し、設定した後にfalseに設定した新しい変数で作成してrenderAppRouteいますparams.donetrue

4

0 に答える 0