Передача большого количества реквизита в рассылку с Redux - PullRequest
0 голосов
/ 13 апреля 2020

В Redux при передаче состояния и отправки от компонента через соединение необходимо использовать некоторые значения состояния внутри отправки при нажатии кнопки (которая генерируется картой).

Я обошел значение внутри тега кнопки значением, но это не похоже на разумный способ сделать это, и он допускает только одно состояние. Здесь есть какая-то концептуальная ошибка?

import React from 'react'
import { connect } from 'react-redux';
import { manageGold, addEnhancement } from '../actions/actions'

const mapStateToProps = (state) => {
    return {
        enhancements: state[0].enhancements
    }
}

const mapDispatchToProps = dispatch => {
    return {   
        manageBuyEnhancement: (event) => {
            dispatch(addEnhancement(/* Pass Enhancement Here */))   
            dispatch(manageGold(event.target.value))        
        }
    }
}

function Enhancements(props) {
    return (
        <div>
            <h4>Enhancements</h4>
            {props.enhancements.map(enh =>
                <div key={Math.random()}>
                    <p>{enh.enhancementName}</p>
                    <p>Price: {enh.enhancementPrice}</p>
                    <p>Qty: {enh.enhancementQty}</p>
                    <button onClick={props.manageBuyEnhancement} value={enh.enhancementName}>Buy!</button>
                </div>

                )
            }
        </div>
    )
}

export default connect(
    mapStateToProps, 
    mapDispatchToProps,
    null,
    {
        pure: false
    }
)(Enhancements)

1 Ответ

1 голос
/ 13 апреля 2020

Вы можете добавить столько аргументов, сколько захотите. Вы можете использовать эту функцию или функцию более высокого порядка.

manageBuyEnhancement: (event, enhancement)=>{
  dispatch(addEnhancement(enhancement))   
  dispatch(manageGold(event.target.value))
}

...

<button onClick={event=>props.manageBuyEnhancement(event,enhancement)} value={enh.enhancementName}>Buy</button>

или

manageBuyEnhancement: enhancement => event =>{
  dispatch(addEnhancement(enhancement))   
  dispatch(manageGold(event.target.value))
}
...
 <button onClick={props.manageBuyEnhancement(enhancement)} value={enh.enhancementName}>Buy</button>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...