2016-08-24 3 views
1

Ich las Presentational and Container Components und Smart and Dumb Components in ReactRedux Beziehung zwischen Komponente, Container- und mapDispatchToProps, mapDispatchToProps

Und das Konzept:

components for “dumb” React components ; 
containers for “smart” React components ; 

Aber sie erwähnte nicht die mapDispatchToProps und mapDispatchToProps

Ist es bedeutet, dass ich sollte state und action aus dem Container bekommen und nicht mapDispatchToProps und mapDispatchToProps in Komponenten verwenden ???
Oder bedeutet, ich kann mapDispatchToProps verwenden, aber nicht mapDispatchToProps in Komponenten verwenden ???

fühlte ich mich zu dieser Komponente, Container-Konzept

Antwort

3

Eine Präsentationskomponente definiert verwirrt wie die Dinge aussehen und nicht in den Laden angeschlossen werden soll. Hier ist ein Beispiel für eine Präsentations/Dumb Komponente:

import React from "react" 
import styles from "./styles.css" 

const TodoList = ({ todos, removeTodo }) => (
    <div className={ styles.todoList }> 
    { ... } 
    </div> 
) 

export default TodoList 

Ein Container definiert, wie die Dinge funktionieren, und Sie sollten nicht DOM-Markup oder Stile in dieser Art von Komponente setzen. Es ist mit dem Store verbunden und stellt nur Daten für Presentational/Dumb-Komponenten bereit. Hier ist ein Beispiel eines Containers/Smart-Komponente:

import { connect } from "react-redux" 
import { removeTodo } from "actions/todos" 
import TodoList from "components/TodoList" 

const mapStateToProps = (state) => ({ 
    todos: state.todos, 
}) 

const mapDispatchToProps = (dispatch) => ({ 
    removeTodo(todoId) { 
    dispatch(removeTodo(todoId)) 
    }, 
}) 

const TodoListContainer = connect(
    mapStateToProps, 
    mapDispatchToProps 
)(TodoList) 

export default TodoListContainer 

Also, Ihre Frage zu beantworten, können Sie nicht mapStateToProps und mapDispatchToProps in Präsentations/Dumb Komponenten verwenden sollten.

+0

Diese Antwort wirklich die Idee für mich, dank geklärt. Nur eine Frage: Ich soll TodoListContainer aufrufen, um die TodoList zu rendern, sollte TodoListContainer keine Komponente mit einer Rendermethode sein? Ich vermisse es im Grunde zu rendern. –

Verwandte Themen