Я новичок в редуксе и столкнулся с проблемой с mapDispatchToProps, в моем приложении для реагирования есть компонент с разными div, каждый раз, когда пользователь щелкает div, он должен менять выбранный цвет через аргумент, который затем передается вниз опять как опора.
Я получаю реквизит из исходного состояния, но не могу заставить mapDispatchToProps работать должным образом. кажется, что есть разные способы обработки mapDispatchToProps, я пробовал несколько, но ни один из них не работал, вот то, что у меня есть на данный момент, без ошибок, но все еще не функционирующий
компонент:
import React from 'react';
import { connect } from 'react-redux';
import { changeSelectedColor } from '../actions/actions';
const ColorPalette = ({ selectedColor, changeSelectedColor }) => {
return(
<div>
<div className='flex justify-center mb-2'>
<p>Selected color: {selectedColor}</p>
</div>
<div className='flex justify-center mb-2'>
<button onClick={() => changeSelectedColor('test')} className='border border-black'>
click to change
</button>
</div>
</div>
)
}
const mapStateToProps = (state) => {
return {
selectedColor: state.colorReducer.selectedColor,
}
}
const mapDispatchToProps = (dispatch) => {
return {
changeSelectedColor: (color) => dispatch(changeSelectedColor(color))
}
}
export default connect(mapStateToProps, mapDispatchToProps)(ColorPalette);
редуктор:
import { combineReducers } from "redux";
const initialState = {
selectedColor: 'black',
};
const colorReducer = (state = initialState, action) => {
switch(action.payload) {
case 'SET_SELECTED_COLOR':
console.log('changing color to ', action)
return {...state, selectedColor: action.payload};
default:
return state;
}
}
export default combineReducers({
colorReducer,
});
действие:
export const changeSelectedColor = (color) => {
return {
type: 'SET_SELECTED_COLOR',
payload: color
}
}
Я также попытался передать mapDispatchToProps как объект, и в этом случае каждая функция должна автоматически переноситься с отправкой если я правильно понял? а также не передавая второй аргумент для подключения и имея диспетчеризацию в качестве реквизита, отправляя действие непосредственно по щелчку, но, как я сказал, оба метода завершились неудачно