2017-06-16 7 views
0

私はバックエンドからデータを取得するためにReduxを使用しています。ajaxデータにフィルタを適用する

componentWillMount() { 
    this.props.dispatch(fetchPlaces()) 
} 

と自分の行動:

export function fetchPlaces() { 
    return function(dispatch) { 
    dispatch({type: "FETCH_PLACES"}); 
    let path = "/server/places" 

    axios.get(path) 
     .then((response) => { 
     dispatch({type: "FETCH_PLACES_FULFILLED", payload: response.data}) 
     }) 
     .catch((err) => { 
     dispatch({type: "FETCH_PLACES_REJECTED", payload: err}) 
     }) 
    } 
} 

と私の減速:

const reducer = (state={ 
    places: [], 
    isFetching: false, 
    error: null 
}, action) => { 
    switch(action.type) { 
    case "FETCH_PLACES" : { 
     return { ...state, isFetching: true } 
    } 
    case "FETCH_PLACES_REJECTED" : { 
     return { ...state, isFetching: false, error: action.payload } 
    } 
    case "FETCH_PLACES_FULFILLED" : { 
     return { ...state, isFetching: false, places: action.payload } 
    } 
    default: 
     return state 
    } 
} 

を各場所はgood_forと呼ばれる性質を持っており、これは私が使用して私のスマートコンポーネントからデータを取得します文字列の配列

タグで場所をフィルタリングすることができます(既に配置されているクエリ文字列を介して渡されます)が、場所をデータベースから取得した後にこれを直接行う必要があります。

これを「Redux方法」でどのように統合できますか?私はそれがdataclient側にすでにある意味場合は場所がデータベース

から取得された後にまっすぐこれを実行できるようにする必要がありますあなたは、あなたの質問

で述べた

答えて

0

AFTERを取得したら、これを行うにはArray.filter()メソッドを使用できます。これと同じように:これは^^役立ちます

// For example your "good_for" field contains the following 

const good_for = [ 'place1', 'place2', 'place3' ]; 

good_for.filter(p => p === 'place2'); 

希望、AJAXリクエスト(axios.get)の後に約束then

0

、あなたは最初の減速にディスパッチする前に、それをフィルタリングすることができます。

クエリ文字列の候補をgoodPlacesarray of string(例:var goodPlaces = ["germany","japan","russia"])という形式で、var lo = require('lodash')を使用しているとします。

.then((response) => { 
    var places = response.data; 
    var filtered = lo.filter(places, p=> goodPlaces.indexOf(p) > -1); 
    dispatch({type: "FETCH_PLACES_FULFILLED", payload: filtered}) 
}) 

もちろん、使用するフィルタリングロジックとツールは柔軟です。あなたは派遣する前にそれをするだけです。

関連する問題