ホーム>source

ブラウザのURLを /uni-classi-virtuali/gestisci/1 に設定した場合

関数 componentWillMount コンポーネント DettaglioClasseVirtuale の(フェッチリソースコールがある場合) rootSaga の前に呼び出されます始めた。

サガがアプリケーションの起動時にリソースをフェッチする標準的な方法はありますか?

これは、リソース「classivirtualiuni」のアイテムを取得するための私の佐賀ウォッチャーです。

ウィズウィズ

単純なrootsagaによって呼び出されます:

ウィズウィズ

これは、react-routerによって処理される私のAppクラスです。

ウィズウィズ

これは、フェッチデータを呼び出すコンポーネントです。

ウィズウィズ

これはアプリケーションの中核です:

ウィズウィズ
export function* watchGetClasseVirtualiUni() { yield takeEvery(GET_CLASSE.REQUEST, getClasseVirtualiUni) } export function* getClasseVirtualiUni(action) { try { const data = yield call(fetchResource, `classivirtualiuni/${action.id}`) if (data.success) { yield put(getClasse.success(data.content)) } else { yield put(getClasse.failure(data.message)) } } catch (error) { yield put(getClasse.failure(error.message)) } }
あなたの答え
  • 解決した方法 # 1

    私はクリーンでシンプルな回避策を見つけました:rootSagaに準備完了のアクションを置き、Mainコンポーネントでそれを待っています。

    ウィズウィズ
    
    ウィズウィズ
    

  • 解決した方法 # 2

    あなたは export default function* rootSaga() { yield [ // ... // ... watchGetClasseVirtualiUni(), put(ready()) ] } を追加することができます  あなたの class App extends Component { render() { return ( <Loader isLoaded={this.props.ready}> <Router history={browserHistory}> <Route path={'/uni-classi-virtuali'} component={Main} > {//...} </Route> </Router> </Loader> ) } } に   getClasseVirtualiUni でアクションを聞くのではなく、アプリの起動時に実行されます 。残っている唯一の問題は、 rootSaga を渡す方法を理解することです  これはコンポーネントを通して渡されます。

  • 解決した方法 # 3

    反応定型文を使用して同様の問題がありました。 watchGetClasseVirtualiUni を使用して修正しました 。

    これを行わないでください:

    ウィズウィズ
    

    これを行う:

    ウィズウィズ
    

    ソース

    classeId

関連記事

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ java - timepickerバリデーターからのPrimeFaces入力時間は、例外がスローされた場合に保存ボタンを無効にする必要があります