2015-09-30 16 views
18

के साथ एक अलग रेड्यूसर से एक क्रिया को कॉल करना मुझे 2 घटक मिल गए; एक बाजार और एक स्थिति। स्थिति घटक उपयोगकर्ता के पास कितनी धनराशि का प्रबंधन करता है और बाजार में कुछ सामान खरीदने के लिए बटन होते हैं। जब मैं बटन (बाजार घटक में) पर क्लिक करता हूं, तो मैं अपने पैसे को कम करना चाहता हूं।रिएक्ट और रेडक्स

मैं इसे सबसे अच्छा तरीका कैसे प्राप्त कर सकता हूं?

यह मेरी अनुप्रयोग घटक जो बाजार है और स्थिति यह है:

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

आपको क्या परेशान कर रहा है? दोनों अच्छे दृष्टिकोण हैं, और उनके बीच कोई महत्वपूर्ण अंतर नहीं है। क्या आप एक के बजाय दो कार्यों को फायर करने के बारे में चिंतित हैं? –

उत्तर

29

दोनों reducers में एक ही कार्रवाई पर प्रतिक्रिया क्यों नहीं? आपके पास कोड हो सकता है:

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

तो, मेरे पास सिर्फ एक प्रेषण होगा? –

+2

@ माइकबॉउटिन हाँ, और इस प्रेषित कार्रवाई –

+0

पर प्रतिक्रिया देने वाले बस अलग-अलग reducers शायद आप इस http://stackoverflow.com/questions/32950185/change-states-array-without-changing-the-whole-state- प्रतिक्रिया-redux –

संबंधित मुद्दे