Reagieren Redux - vorbei an Requisiten mit Aktionen
Ich habe eine einfache Komponente, die möchte ich wechseln je nach seinen Requisiten. Code sieht wie folgt aus:
actions.js
const toggleTodo = (id) => {
return {
type: 'TODOITEM__TOGGLE_TODO',
id
}
};
export {
toggleTodo
}
component.js
import React from 'react';
const TodoItem = (props) => {
const completed = props.isDone === true ? 'done' : '';
return (
<li className={completed} id={props.id} onClick={props.toggle}>{props.text}</li>
);
}
export default TodoItem;
container.js
import { connect } from 'react-redux';
import component from './component';
import * as actions from './actions';
const mapStateToProps = (state) => {
return state;
};
const mapDispatchToProps = (dispatch) => {
return {
toggle: (id) => { dispatch(actions.toggleTodo(id)); }
}
};
const TodoItem = connect(
mapStateToProps, mapDispatchToProps
)(component);
export default TodoItem;
reducers.js
const todoItemReducer = (state = [], action) => {
switch (action.type) {
case 'TODOITEM__TOGGLE_TODO':
console.log(action.id);
return state;
}
return state;
};
export default todoItemReducer;
index.js
import React from 'react';
import { render } from 'react-dom';
import { Provider } from 'react-redux';
import { createStore } from 'redux';
import TodoItem from './components/TodoItem/container';
import reducers from './reducers';
const store = createStore(reducers, window.devToolsExtension && window.devToolsExtension());
render(
<Provider store={store}>
<TodoItem key="1" isDone={false} text="Test" id="1" />
</Provider>,
app
);
reducers.js
import { combineReducers } from 'redux';
//Reducers
import todoItemReducer from './components/TodoItem/reducers';
const reducers = combineReducers({
todoItemReducer
});
export default reducers;
Wenn ich diesen starte, und klicken Sie auf der besagten Komponente, die Konsole gibt ein event
Objekt. Was kann ich tun, um pass etwas gibt?
Bitte beachten Sie, dass ich verwendet onClick={() => { props.toggle(props.id) }}
vor, aber ich glaube nicht, dass dies ein richtiger Weg.
- Ich bin dabei - und
action.id
(in deinem Beispielaction.payload
) ist einevent
(auf) Objekt. - ja, Sie verstehen, mein Kommentar war bereits in Ihrem code... onClick, müssen Sie passieren die
id
Recht? die Methode toggle fehlt, denke ich.. - Wo diese Methode sein sollte, und wie sollte es Aussehen?
- Ihre reducer nicht tun. Deine id muss eine Zahl oder eine Zeichenfolge, die nicht ein Ereignis-Objekt. In
mapStateToProps
wählen Sie den gesamten Staat und nicht nur ein bestimmtes todo-Element. - Ich weiß, es sollte eine Zahl sein oder ein string, aber wie kann ich es passieren? Meine reducer nicht alles tun, da kann ich nicht die
id
zu arbeiten. - Auch die root-reducer scheint völlig zu fehlen, aber ich bin (vielleicht fälschlicherweise) vorausgesetzt, Sie einfach nicht gehören, dass code.
- Ich habe bearbeitet die Frage und legte den rest des Codes gibt.
- Sie erhalten die id von Requisiten. Zurzeit dein code scheint nicht zu enthalten konkrete Daten, und dies bedeutet, dass es keine id und keine anderen Daten wie z.B. text oder abgeschlossen-Feld entweder. Es ist bis zu dem reducer, um die Form des Staates. Mit dem Druckminderer nichts zu tun, Sie haben keinen Staat.
- Ich verstehe. Aber ich habe eine
id
prop übergeben (als dummy-content, true, aber immer noch) in beidencomponent.js
und inindex.js
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
mapStateToProps
muss wählen Sie eine einzelne todo basiert auf Requisiten (ein id-prop-um genau zu sein). Erstellen Sie einen Druckminderer für todo-items (plural!). Dieser Druckminderer fordert, die man für ein einzelnes Element reducer. Sie sollten sich auf die standard -Redux todo-Beispiel, die tut alles, was Sie brauchen.Beachten Sie in dem Beispiel gibt es zwei Reduzierstücke, eine für die Liste der Reduzierstücke und eine für einen einzigen reducer.
reducers.js zurück isDone
container.js
id
, wie ich geschrieben habe in meiner Frage.isDone
eingestellt ist, auf dem array. Es funktioniert, aber es ist eine schreckliche Idee. Auch gelingt es nur ein einziges todo und nur dieisDone
prop. Ich empfehle dringend, dass Sie einen Blick auf die kanonischen redux Beispiel.