Я новичок в Redux и создаю простое приложение Redux.По умолчанию есть список собак, и если я нажму одну из кнопок, я смогу увидеть детали о выбранной собаке.Прямо сейчас, если я нажимаю кнопку, он говорит: «this.props.selectDog не является функцией».В консоли нет собаки внутри объекта selectedDog, вместо этого она говорит «selectedDog: function bindActionCreator ()».Как я могу исправить эту ошибку?
Action Creator
export const selectDog = (dogs) => {
return {
type: 'SELECT_DOG',
payload: dogs
};
};
Reducer
import { combineReducers } from 'redux';
const dogsReducer = () => {
return [
{ "breed": "Beagle", "characteristics": "playful" },
{ "breed": "Golden Retriever", "characteristics": "calm" },
{ "breed": "Corgi", "characteristics": "bright" },
{ "breed": "Goldendoodle", "characteristics": "gentle" },
{ "breed": "Labrador Retriever", "characteristics": "loyal" }
];
};
const selectedDogReducer = (selectedDog = null, action) => {
if (action.type === 'SELECT_DOG') {
return action.payload;
}
return selectedDog;
}
export default combineReducers({
dogs: dogsReducer,
selectedDog: selectedDogReducer
})
DogList.js
import React from 'react';
import { connect } from 'react-redux';
import { selectDog } from '../actions';
class DogList extends React.Component {
renderList() {
return this.props.dogs.map(dog => {
console.log(this.props);
return (
<div key={dog.breed}>
<p>{dog.breed}<br />
<button onClick={() => this.props.selectedDog(dog)}>SELECT</button></p>
<br />
</div>
)
})
}
render() {
return (
<div>
{this.renderList()}
</div>
);
}
};
const mapStateToProps = (state) => {
return { dogs: state.dogs };
};
export default connect(mapStateToProps, {
selectedDog: selectDog
})(DogList);
DogDetail.js
import React from 'react';
import { connect } from 'react-redux';
const DogDetail = ({dogs}) => {
if (!dogs) {
return <div>Select a Dog!</div>
}
return (
<div>
<h3>Dog Detail:</h3>
<p>{dogs.breed}<br />
{dogs.characteristics}
</p>
</div>
);
};
const mapStateToProps = (state) => {
return { dog: state.selectedDog }
};
export default connect(mapStateToProps)(DogDetail);
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import { createStore } from 'redux';
import App from './components/App';
import reducers from './reducers';
ReactDOM.render(
<Provider store={createStore(reducers)}>
<App />
</Provider>,
document.querySelector('#root')
)