2016-04-21 34 views
5

Secondo https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0#.i63w9pvzwReagire. È brutto se i componenti di presentazione contengono componenti del contenitore?

componenti di presentazione:

  • possono contenere sia i componenti di presentazione e contenitore ** dentro, e di solito hanno un certo margine di profitto DOM e gli stili dei loro propri.
  • Non hanno dipendenze dal resto dell'app, come azioni Flux o negozi.

penso che se i componenti di presentazione contengono componenti del contenitore, che riceveranno dipenderà Flux o Redux (o qualsiasi altra cosa i componenti del contenitore dipendono).

Ciò renderà i componenti di presentazione difficili da testare e riutilizzare.

+0

C'è una domanda? – aet

+0

@ aet Mi chiedo se i componenti di presentazione contenenti componenti del contenitore non siano corretti? –

+2

Abbastanza giusto. La risposta non è semplice. Si potrebbe obiettare che sarebbe meglio progettare l'app in modo tale che non sia necessario nidificare i componenti del contenitore. Ad esempio, con redux, nulla ti impedisce di passare l'intero oggetto di stato a tutti i componenti come oggetti di scena (e questo è uno schema comune), eliminando così la necessità di quei contenitori più in basso nella catena. Ma forse hai una buona ragione per farlo, come se un sottocomponente avesse bisogno di uno stato e quello stato fosse un oggetto grande, e le prestazioni potrebbero risentirne se fossero passate a tutti. – aet

risposta

2

Non è male, è perfettamente a posto. L'intero punto di react-redux consiste nel consentire di connettere i componenti del contenitore direttamente all'archivio senza dover passare l'intero negozio su ogni componente come supporto. Il riutilizzo dei componenti non è un problema, dal momento che il componente <Provider> farà in modo che qualsiasi componente del contenitore collegato funzioni ovunque sotto di esso.

In realtà non è difficile testare i componenti del container. È possibile rendere il componente connesso l'esportazione predefinita, ma anche esportare il componente non connesso come esportazione denominata, che è possibile utilizzare per i test e passarlo manualmente in tali test. Vedere la sezione "Componenti connessi" di 'Writing Tests' part of the Redux docs per maggiori informazioni.

Per quanto riguarda il test dei componenti di presentazione che contengono componenti del contenitore, non sarà un problema. Un rendering poco profondo funzionerà ancora bene nei test (a meno che non si stia eseguendo lo this issue). E se è necessario montare il componente in un test, è sempre possibile avvolgerlo in un componente <Provider> con un negozio specifico per quel test.

Modifica: Questa risposta è specifica per Redux con react-redux. Altre implementazioni di Flux potrebbero avere qualche difficoltà con questo di cui non sono a conoscenza.

Problemi correlati