In un progetto basato su React + Redux, ho un componente edi connect()
che controlla le autorizzazioni dell'utente tramite un recupero API. Le autorizzazioni recuperate sono memorizzate nell'archivio di Redux.Re-rendering del componente connect() ed in base all'output mapStateToProps
Il componente è fondamentalmente simile a <Can check="...">...</Can>
, che comunica con la nostra API (tramite azioni di Redux) per risolvere il controllo. Se viene concessa l'autorizzazione, viene eseguito il rendering this.props.children
, null
in caso contrario.
Per questo, mapStateToProps()
calcola un puntello passes
da dati di autorizzazione nell'archivio, che è selezionato nel metodo <Can />
s render()
. Io uso il parametro ownProps
su mapStateToProps()
per ottenere il "materiale da controllare" e calcolare il flag passes
.
C'è un po 'di memorizzazione nella cache, quindi non riesco a recuperare su ogni mount del componente, e funziona fondamentalmente. A volte, tuttavia, il componente non viene riprodotto nuovamente quando il puntello passes
viene aggiornato a true
(verrà comunque visualizzato dopo la navigazione - utilizzando il router di risposta - e di nuovo indietro, quindi in pratica se il componente viene reinstallato).
Do connect()
i componenti ed eseguono nuovamente il rendering se l'uscita da mapStateToProps()
cambia? La documentazione per s connect()
react-redux
' dire questo:
Se ownProps è specificato come secondo argomento, il suo valore sarà gli oggetti di scena passati al componente, e mapStateToProps sarà nuovamente invocato ogni volta che il componente riceve nuovi oggetti di scena.
Ciò significa che il passaggio in ownProps
modifica il rendering in modo che venga eseguito nuovamente il rendering se gli oggetti di scena cambiano o in altro modo? Come posso capire la nota riguardante la memoizzazione/restituire una funzione da mapStateToProps()
, o non è nemmeno correlata?
Grazie
Grazie per aver risposto così in fretta. Controllerò di nuovo e assicurarmi che nulla nella logica del riduttore o del selettore sia effettivamente errato prima di presentare un problema. Il controllo poco accurato sull'uguaglianza potrebbe essere un problema. –
Come suggerimento rapido per i documenti [connect()] (https://github.com/reactjs/react-redux/blob/master/docs/api.md#connectmapstatetoprops-mapdispatchtoprops-mergeprops-options), forse cambia il la formulazione di _ [...] e mapStateToProps verrà richiamata * in aggiunta * ogni volta che il componente riceve nuovi oggetti di scena. –
Un PR è benvenuto! –