2015-09-30 20 views
18

2つのコンポーネントがあります。市場と地位。ステータスコンポーネントは、ユーザーが持っている金額を管理し、マーケットにはいくつかのものを購入するためのボタンがあります。ボタンをクリックすると(マーケットコンポーネント内で)、私はお金を減らしたいと思う。Reactとreduxで別のレデューサーからアクションを呼び出す

これを実現するにはどうすればよいですか?

これは、市場やステータスを持っている私のアプリケーションコンポーネントです:

import React from 'react'; 
import { Link } from 'react-router'; 
import { connect } from 'react-redux'; 
import { bindActionCreators } from 'redux'; 
import * as MarketActions from '../actions/market-actions'; 
import * as StatusActions from '../actions/status-actions'; 

import Market from './Market.react'; 
import Status from './Status.react'; 

export default class App extends React.Component { 
    render() { 
    const { dispatch, market, status } = this.props; 

    return (
     <div> 
     <h1>App</h1> 
     <Link to='/'>App</Link>{' '}<Link to='/home'>Home</Link> 
     <Status status={status} {...bindActionCreators(StatusActions, dispatch)} /> 
     <Market market={market} {...bindActionCreators(MarketActions, dispatch)} {...bindActionCreators(StatusActions, dispatch)} /> 
     {this.props.children} 
     </div> 
    ); 
    } 
} 

export default connect(state => ({ market: state.market, status: state.status }))(App); 

私は(私はそれを行うには正しいことではないと感じ、それが働いていた)市場のコンポーネントのステータスからアクションを結合しました。この後

は、私はこのようなボタンのクリックで市場のコンポーネントでこれらのアクションを扱う:

handleBuyClick(e) { 
    let { index, price } = e.target.dataset; 
    index = parseInt(index); 
    price = parseInt(price); 

    this.props.buyItem(index); 
    this.props.changeMoney(price); //this bugs me, i think it don't belongs there 
} 

は、より良い方法はありますか?

ありがとう

+0

あなたを悩ましているのは何ですか?両方とも良いアプローチであり、両者には大きな違いはありません。あなたは1つではなく2つのアクションを発射することに心配していますか? –

答えて

29

両方のレデューサーで同じ反応に反応しないのはなぜですか?

function status(state, action){ 
... 
    switch(action.type){ 
     case BUY_ITEM: { 
      return 'bought' 
     } 
    } 
... 
} 

function market(state, action){ 
... 
    switch(action.type){ 
     case BUY_ITEM: { 
      return {...state, action.itemId : state[action.itemId] - 1 } 
     } 
    } 
... 
} 

「反応コード」を実行する必要があります。

+0

だから、派遣は1回しかありませんか? –

+2

@MikeBoutinうん、ちょうどこのディスパッチされたアクションに反応する異なるレデューサー –

+0

多分あなたは私にこれを手伝うことができますhttp://stackoverflow.com/questions/32950185/change-states-array-with-changing-the-whole-state-反応しないで還元しなさい –

関連する問題