Je vais essayer de répondre aux questions initiales ...
Composants intelligents et stupides
Dans votre première question, vous demandez essentiellement pourquoi bindActionCreators
est nécessaire en premier lieu, et quel type de composants ne devrait pas être au courant de Redux.
En résumé, l'idée est que les composants doivent être divisés en deux parties. intelligent (conteneur) et stupide (de présentation). Composants muets travailler sur la base du besoin de savoir. Leur tâche essentielle est de rendre des données données en HTML et rien de plus. Ils ne doivent pas être au courant du fonctionnement interne de l'application. Ils peuvent être considérés comme la couche frontale de votre application.
D'autre part composants intelligents sont en quelque sorte une colle, qui prépare les données pour les stupide et, de préférence, n'effectue pas de rendu HTML.
Ce type d'architecture favorise un couplage lâche entre la couche d'interface utilisateur et la couche de données sous-jacente. Cela permet de remplacer facilement l'une des deux couches par une autre (par exemple, une nouvelle conception de l'interface utilisateur), sans que l'autre couche ne soit détruite.
Pour répondre à votre question : les composants muets ne devraient pas être au courant de Redux (ou de tout autre détail d'implémentation inutile de la couche de données, d'ailleurs) parce que nous pourrions vouloir le remplacer par autre chose à l'avenir.
Vous pouvez trouver plus d'informations sur ce concept dans le Manuel Redux et plus en profondeur dans l'article Composants de la présentation et du conteneur par Dan Abramov.
Quel exemple est le meilleur
La deuxième question portait sur les avantages/inconvénients des exemples donnés.
En el premier exemple les créateurs de l'action sont définis dans un actionCreators
ce qui signifie qu'ils peuvent être réutilisés ailleurs. C'est à peu près la façon standard de définir les actions. Je ne vois pas vraiment d'inconvénients à cela.
En deuxième exemple définit les créateurs d'actions en ligne, ce qui présente de multiples inconvénients :
- les créateurs d'actions ne peuvent pas être réutilisés (évidemment)
- la chose est plus verbeuse, ce qui se traduit par une lecture moins aisée.
- Les types d'action sont codés en dur - il est préférable de les définir en tant que
consts
séparément, afin qu'ils puissent être référencés dans les réducteurs - cela réduirait les risques d'erreurs de frappe.
- la définition des créateurs d'actions en ligne est contraire à la manière recommandée/attendue de les utiliser - ce qui rendra votre code un peu moins lisible pour la communauté, au cas où vous prévoyez de partager votre code.
Le deuxième exemple a un avantage plutôt que le premier - c'est plus rapide à écrire ! Donc, si vous n'avez pas de grands projets pour votre code, cela pourrait être parfait.
J'espère avoir réussi à clarifier un peu les choses ...