2017-05-25 13 views
0

特定の段階でアクションをレデューサーにディスパッチしようとしていますが、動作していないようです。 showGeo()関数は、コンポーネントがマウントされたときに起動されます。コンソールに表示されるのは空の配列で、デフォルトの状態です。私はディスパッチでリターンブロック内のコードをラップしようとしましたが、どちらも動作しません。私は初心者ですので、どんな助けもありがとうございます。ここで私はアクションをディスパッチしようとしていますが、登録していないようです

export const sendAction = (user) => { 
    return (dispatch) => { 
     dispatch({ type: GEO_SUCCESS, payload: user }); 
    }; 
}; 

export const showGeo =() => { 
    const firebaseRef = firebase.database().ref('/geofire'); 
    const geoFire = new geofire(firebaseRef); 
    let user; 
    const geoQuery = geoFire.query({ 
    center: [37.78, -122.4], 
    radius: 10 //kilometers 
    }); 

    geoQuery.on("key_entered", function(key, location, distance) { 
    console.log("Bicycle shop " + key + " found at " + location + " (" + distance + " km away)"); 

    firebase.database().ref('/users/' + key).once('value').then(function(snapshot) { 
     console.log(snapshot.val()); 
     user = snapshot.val(); 
     sendAction(user); 
     }); 
    }); 
}; 

は減速ファイルです:

import { 
    GEO_SUCCESS 
} from '../actions/types'; 

export default (state = [], action) => { 
    switch (action.type) { 
    case GEO_SUCCESS: 
     return action.payload; 
    default: 
     return state; 
    } 
}; 

答えて

1

[OK]を、私はあなたの問題を参照してください信じています。適切な機能でdispatchを使用していません。コンポーネント内でshowGeoを使用している場合は、sendAction関数をディスパッチできるように、関数にdispatchをReduxに注入する必要があります。あなたはReduxののmapDispatchToPropsを使用してdispatchを注入

showGeo =() => { 
    return dispatch => { 
    //... 
    dispatch(sendAction()) // where this dispatches the action 
    } 
} 

とあなたのコンポーネントで:だからshowGeoはこのようにsendActionのようになります。

Redux docsThunk middlewaresを調べることをおすすめします。私はチュートリアルに進み、Redux examplesをブラウズして、その両方をよりよく理解することをお勧めします。

+0

こんにちは、私はsendActionによってアクセス可能なグローバル変数であることを忘れていました。私はとにかくあなたの提案を試みます。ありがとう – moe

+0

好奇心が強い....それはグローバル変数の理由はありますか?あなたはreduxを使用しており、その中にユーザーを含めるためのアクションをディスパッチしています。 –

+0

本当の理由はありませんが、提案したようにコードをパラメータとして提供するようにコードを変更しましたが、まだアクションはユーザーの状態を更新していません。 – moe

関連する問題