2016-01-17 14 views
11

Nelle settimane precedenti ho cercato di imparare React e Redux. Ora ho incontrato un problema per il quale non ho trovato una risposta giusta.Javascript Redux - come ottenere un elemento dal negozio con ID

Supponiamo di avere una pagina in React che ottiene puntelli dal collegamento.

const id = this.props.params.id; 

Ora in questa pagina, mi piacerebbe visualizzare un oggetto da STORE con questo ID.

const initialState = [ 
     { 
     title: 'Goal', 
     author: 'admin', 
     id: 0 
     }, 
     { 
     title: 'Goal vol2', 
     author: 'admin', 
     id: 1 
     } 
    ] 

La mia domanda è: dovrebbe la funzione di interrogare la l'oggetto dal STORE essere nel file di paging, prima che il metodo di rendering, o dovrei usare creatori di azione e di includere la funzione di riduttori. Ho notato che i reduceres sembrano contenere solo azioni che hanno un impoact in negozio, ma il mio interroga solo il negozio.

Grazie in anticipo.

risposta

12

Si potrebbe utilizzare i mapStateToProps funzione per interrogare il negozio quando si collega il componente per redux:

import React from 'react'; 
import { connect } from 'react-redux'; 
import _ from 'lodash'; 

const Foo = ({ item }) => <div>{JSON.stringify(item)}</div>; 

const mapStateToProps = (state, ownProps) => ({ 
    item: _.find(state, 'id', ownProps.params.id) 
}); 

export default connect(mapStateToProps)(Foo); 

(Questo esempio utilizza lodash - _)

La funzione mapStateToProps prende in tutto lo stato redux e gli oggetti di scena del tuo componente, e da questo puoi decidere cosa inviare come oggetti di scena al tuo componente. Quindi, dati tutti i nostri articoli, cerca quello con l'id che corrisponde al nostro URL.

https://github.com/rackt/react-redux/blob/master/docs/api.md#arguments

+0

La ringrazio molto per questo :) –

+0

@Dylan, ho scoperto che '_find (stato, {id: ownProps.params.id})' funzionerà bene. Da questo '_.find (stato, 'id', ownProps.params.id)' Non stavo ottenendo risultati corretti. – Srinivas

Problemi correlati