У меня проблемы с Redux.Я создал Reduser, и он отлично работает.Это меняет магазин, и я могу показать, что в ReduxDevTools.Но в состоянии компонента не обновляется.
У меня есть mapStateToProps, mapDispatchToProps, connect,
, и все это выглядит как в документации, но это не работает.
index.js
import React from 'react';
import ReactDOM from 'react-dom';
import './css/index.css';
import App from './components/App.jsx';
import { createStore } from 'redux';
import { Provider } from 'react-redux';
import storeApp from './reducers';
let store = createStore(
storeApp,
window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
);
ReactDOM.render(
<Provider store={store}>
<App />
</Provider> , document.getElementById('root'));
это мой редуктор который я объединяю в комбайнах;
import {FIRST_ACTION, SECOND_ACTION ,THIRD_ACTION} from '../actions/actionTypes';
const firstRedus = (state = {}, action) => {
switch (action.type) {
case FIRST_ACTION:
return Object.assign({}, state, {
test: action.text
})
case SECOND_ACTION:
return Object.assign({}, state, {
test: action.text
})
case THIRD_ACTION:
return Object.assign({}, state, {
test2: action.text
})
default:
return state
}
}
export default firstRedus
Это мой комбайновые редукторы
import { combineReducers } from 'redux'
import firstRedus from './firstRedus'
export default combineReducers({
firstRedus
})
это мой компонент App.jsx
import React, { PureComponent } from 'react';
import '../css/App.css';
import { connect } from 'react-redux'
import { bindActionCreators } from 'redux'
import {actFirst,actSec} from '../actions/actions.js';
class App extends PureComponent {
constructor(props) {
super(props)
this.state = {
test: this.props.test
}
this.handleClick1= this.handleClick1.bind(this);
this.handleClick2= this.handleClick2.bind(this);
}
handleClick1(e){
e.preventDefault();
this.props.actFirst('first')
}
handleClick2(e){
e.preventDefault();
this.props.actSec('scond')
}
render() {
return (
<div className="App">
<ul>
<li>{this.state.test}</li> //doesn't work
<li>{this.props.test}</li> //doesn't work
</ul>
<button onClick={this.handleClick1}>test1</button>
<button onClick={this.handleClick2}>test2</button>
</div>
);
}
}
function mapStateToProps(state){
return {
test: state.test
}
};
function mapDispatchToProps(dispatch,ownProps) {
return {
actFirst: (text) => {
dispatch(actFirst(text));
},
actSec: (text) => {
dispatch(actSec(text));
}
}
};
export default connect(
mapStateToProps,
mapDispatchToProps
)(App);