Zakładam, że przez "wartości każdego reduktora" odnosisz się do całego stanu aplikacji.
Możesz z pewnością podzielić swój stan i ujawnić tylko niezbędne elementy do konkretnych komponentów. Do tego służy metoda connect
z powiązań connect
. connect
przyjmuje funkcję (np. mapStateToProps
), która z kolei bierze cały stan aplikacji i eksponuje tylko elementy określone jako rekwizyty do komponentu, który "łączy" z redux.
Na przykład, załóżmy, że masz prosty React komponentu tak, że pokazuje, nazwisko i adres użytkownika:
var myComponent = React.createClass({
render: function() {
return (
<div>{Name from redux state goes here}</div>
<div>{Address from redux state goes here}</div>
);
}
});
Oczywiście nie trzeba wysłać cały stan aplikacji do tego elementu, po prostu kawałek z nazwą i adresem użytkownika. Więc użyć connect
tak:
// the "state" param is your entire app state object.
function mapStateToProps(state) {
return {
name: state.name,
address: state.address
}
}
var connectedComponent = connect(mapStateToProps)(myComponent);
Owinięty myComponent
teraz efektywnie wygląda następująco:
var myComponent = React.createClass({
propTypes: {
name: React.PropTypes.string // injected by connect
address: React.PropTypes.string // injected by connect
},
render: function() {
return (
<div>{this.props.name}</div>
<div>{this.props.address}</div>
);
}
});
Tak, już to robię. Próbuję uniknąć posiadania tak wielu plików reduktora. Jeśli potrzebuję tylko przechowywać 1 zmienną dla komponentu, to czuję się jak overkill do stworzenia reduktora dla tej trywialnej zmiennej, która zostanie użyta tylko w jednym miejscu. – tkiethanom
Tak, aby poradzić sobie z tym problemem, wróciłem do przechowywania lokalnego, przejściowego stanu w samych komponentach i użycia 'setState'. Umieszczenie całego stanu aplikacji, w tym banalne rzeczy, takie jak to, czy wysuwany przycisk jest otwarty, w twoich reduktorach/sklepach brzmi świetnie w teorii, ale szybko odkryłem, że rzeczy stają się nieporęczne. Teraz używam tylko sklepów w stanie, który musi być udostępniony w całej aplikacji. –
Tak, myślę, że również zacznę używać 'setState' dla komponentów, które nie muszą komunikować się z resztą aplikacji. – tkiethanom