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 Beispiel action.payload) ist ein event (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 beiden component.js und in index.js.

Schreibe einen Kommentar