2016-09-15 3 views
2

は、現在、私コンテナコンポーネントのライフサイクルメソッドcomponentWillMountでAPIからのプリロードデータ:はReduxのcomponentWillMountを呼び出すことはありませんバックナビ+ルータに反応

componentWillMount() { 
    const { dept, course } = this.props.routeParams; 
    this.props.fetchTimetable(dept, course); 
} 

ユーザがルート/:dept/:courseに移動したときに呼び出され、それが正常に動作しますあなたがナビゲートするまで、/mif/31/mif/33と入力し、戻るボタンを押します。コンポーネントは実際に再初期化されないため、ライフサイクルメソッドは呼び出されず、データは再ロードされません。

この場合、データをリロードする方法はありますか?別のデータプリロード方法を使用する必要がありますか?私は反応のルータは、背面をナビゲートするなど、任意の場所の変更でLOCATION_CHANGEイベントを放出を参照してください、多分私は何とかそれを使用することができますか?あなたを想定し

import { getTimetable } from '../api/timetable'; 

export const REQUEST_TIMETABLE = 'REQUEST_TIMETABLE'; 
export const RECEIVE_TIMETABLE = 'RECEIVE_TIMETABLE'; 

const requestTimetable =() => ({ type: REQUEST_TIMETABLE, loading: true }); 
const receiveTimetable = (timetable) => ({ type: RECEIVE_TIMETABLE, loading: false, timetable }); 

export function fetchTimetable(departmentId, courseId) { 
    return dispatch => { 
    dispatch(requestTimetable()); 
    getTimetable(departmentId, courseId) 
     .then(timetable => dispatch(receiveTimetable(timetable))) 
     .catch(console.log); 
    }; 
} 

答えて

2

新しい小道具(nextProps)が既存の小道具(this.props)と同じかどうか確認するには、componentWillReceivePropsを使用する必要があります。ここに関連するコードは、Reduxの例である:https://github.com/reactjs/redux/blob/e5e608eb87f84d4c6ec22b3b4e59338d234904d5/examples/async/src/containers/App.js#L13-L18

componentWillReceiveProps(nextProps) { 
    if (nextProps.dept !== this.props.dept || nextProps.course !== this.props.course) { 
    dispatch(fetchTimetable(nextProps.dept, nextProps.course)) 
    } 
} 
+1

これは意味がありますが、私はこれを使用することを考えていましたが、それ以上調べていませんでした。私は最初にこれを実装したくはありませんでした。なぜなら、それは小道具を受け取るたびにデータを再フェッチすると思ったからです。しかし、小道具を最初にチェックすることは考えていませんでした。この例をリンクしていただきありがとうございます。 –

0

私が間違ってここにあるかもしれないが、私はあなたが探している機能がcomponentWillMountではないと考えているが、componentWillReceiveProps、

それが重要ならば、ここでのだが、私はデータロード機能を実装する方法ですあなたはコンポーネントを再描画する必要があります。

そうしないと、あなたはあなたの店の変化を購読することができます。http://redux.js.org/docs/api/Store.html

免責事項:私はおそらくあなたがしてReduxのはあまりを知っています。

+0

私は店の変化に加入しているが、コンポーネント自体がデータをフェッチする場合にのみストアが変更されます。後で最初のレンダリングで呼び出されないので、私はcomponentWillMountとcomponentWillReceivePropsを使う必要があるようです。 –

関連する問題