Ich versuche Redux zu lernen. Ich folgte einem Online-Tutorial und nutzte ihr Beispiel und es funktionierte gut. Dann habe ich noch eine kleine Test-App gemacht und es hat gut funktioniert. Jetzt probiere ich eine andere kleine Test-App aus und ich bleibe bei diesem Fehler stecken und habe keine Ahnung warum.Redux - Reducer wird nicht aufgerufen
Die App ist einfach ein Eingabefeld und eine Schaltfläche, und wenn Sie auf die Schaltfläche klicken, fügt das, was in dem Feld ist, zu einer Liste hinzu, die unten angezeigt wird.
Der Aktuator aktualisiert den Status jedoch nicht. Ich habe mir die häufigen Probleme angeschaut, die das verursachen, und kann diese Fehler in mir nicht finden, mein Reduzierer ändert den Zustand nicht und ich habe den Versand und so weiter gebunden. Vielleicht habe ich gerade irgendwo etwas falsch gemacht (oder so etwas Kleines und Dummes), aber ich kann es einfach nicht funktionieren lassen.
Also habe ich versucht, es zu ändern, so dass es nur anzeigt, was Sie in das Feld eingeben, und es funktioniert immer noch nicht. Wer weiß, warum der Reduktor nicht aktiviert wird?
index.js (main)
import 'babel-polyfill';
import React from 'react';
import ReactDOM from 'react-dom';
import {Provider} from 'react-redux';
import {createStore, applyMiddleware} from 'redux';
import thunk from 'redux-thunk';
import promise from 'redux-promise';
import createLogger from 'redux-logger';
import allReducers from './reducers';
import App from './components/App';
const logger = createLogger();
const store = createStore(
allReducers,
applyMiddleware(thunk, promise, logger)
);
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('root')
);
App.js
import React from 'react';
import NameList from '../containers/name-list.js'
import Input from '../containers/input.js'
const App =() => (
<div>
<Input />
<hr />
<NameList />
</div>
);
export default App;
index.js (action)
export const addName = (name) => {
return {
type: 'NAME_ADDED',
payload: name
}
};
Minderer-Add-name.js
export default function (state = null, action) {
switch (action.type) {
case 'NAME_ADDED':
return action.payload;
break;
}
return state;
}
index.js (Minderer Kombinierer)
import {combineReducers} from 'redux';
import AddNameReducer from './reducer-add-name';
const allReducers = combineReducers({
nameList: AddNameReducer
});
export default allReducers
input.js
import React, {Component} from 'react';
import {bindActionCreators} from 'redux';
import {connect} from 'react-redux';
import {addName} from '../actions/index'
class Input extends Component {
render() {
return(
<div>
<input id='name-input' />
<button id='add-name-button' onClick={() => addName(document.getElementById('name-input').value)}>Add name</button>
</div>
);
}
}
function mapStateToProps(state) {
return {
nameList: state.nameList
};
}
function matchDispatchToProps(dispatch) {
return bindActionCreators({addName: addName}, dispatch);
}
export default connect(mapStateToProps, matchDispatchToProps)(Input);
Name-list.js
import React, {Component} from 'react';
import {bindActionCreators} from 'redux';
import {connect} from 'react-redux';
class NameList extends Component {
getNameList() {
//This is where I'll loop through this.props.nameList and build the list of elements
return this.props.nameList;
}
render() {
return(
<div>Current list : {this.getNameList()}</div>
);
}
}
function mapStateToProps(state) {
return {
nameList: state.nameList
};
}
export default connect(mapStateToProps)(NameList);
Danke für jede Hilfe!
Überprüfen Sie die Konsole auf Fehler. Ich kann auch nicht sehen, dass Ihr Reducer AddNameReducer exportiert (der in index.js importiert wird), aber Sie haben vielleicht gerade diesen Post verpasst und nicht den echten Code. –
Es gibt keine Konsolenfehler an irgendeinem Punkt. Und AddNameReducer ist nur die Reducer-Add-Name.js-Datei, die eine einzelne exportierte Funktion ist. – Jayce444
Die Connect-Funktion in input.js weist Dispatch-Methoden den Props für die Input-Komponente zu. Wenn also die Render-Funktion der Input-Komponente addName aufruft, würde sie erwarten, dass sie dies als Prop verweist? (So versuchen Sie dies.props.addName) –