Ich habe angefangen mit react-redux und finde es eine sehr interessante Möglichkeit, um den Front-End-Code für eine Anwendung mit vielen Objekten zu vereinfachen, die es von einem Back-End-Service erhält, wo die Objekte am Frontend aktualisiert werden müssen in ungefähr Echtzeit.Warum kann ich eine Reaktionskomponente nicht curren?
Die Verwendung einer Containerklasse automatisiert das Beobachten weitgehend (wodurch die Objekte im Geschäft aktualisiert werden, wenn sie sich ändern). Hier ein Beispiel:
const MethodListContainer = React.createClass({
render(){
return <MethodList {...this.props} />},
componentDidMount(){
this.fetchAndWatch('/list/method')},
componentWillUnmount(){
if (isFunction(this._unwatch)) this._unwatch()},
fetchAndWatch(oId){
this.props.fetchObject(oId).then((obj) => {
this._unwatch = this.props.watchObject(oId);
return obj})}});
Bei dem Versuch, den Rest der Anwendung mit möglichst einfacher und klarer Trennung wie möglich zu liefern, habe ich versucht, ein alternative ‚connect‘ zu liefern, die automatisch einen geeigneten Behälter so liefern würde:
const connect = (mapStateToProps, watchObjectId) => (component) => {
const ContainerComponent = React.createClass({
render(){
return <component {...this.props} />
},
componentDidMount(){
this.fetchAndWatch()},
componentWillUnmount(){
if (isFunction(this._unwatch)) this._unwatch()},
fetchAndWatch(){
this.props.fetchObject(watchObjectId).then((obj) => {
this._unwatch = this.props.watchObject(watchObjectId);
return obj})}
});
return reduxConnect(mapStateToProps, actions)(ContainerComponent)
};
Diese wird dann so verwendet:
module.exports = Verbindung (mapStateToProps, '/ list/method') (method)
jedoch component
wird nicht gerendert. Der Container wird gerendert, außer dass die component
nicht instanziiert oder gerendert wird. Die component
wird wie erwartet gerendert (und aktualisiert), wenn ich sie nicht als Parameter übergebe und stattdessen direkt referenziere.
Es werden keine Fehler oder Warnungen generiert.
Was mache ich falsch?
Danke für den Vorschlag. Dies machte jedoch keinen Unterschied. –
Ich sehe kein Problem mit der Art und Weise, wie Sie die HOC strukturieren, abgesehen von dem, worauf ich hingewiesen habe. Ich nehme an, dass 'reduxConnect' ein Alias des redux connect 'import {connect als reduxConnect} von 'react-redux' ist;' – jpdelatorre
Es ist. Ich kann das Problem auch nicht sehen, weshalb ich die Frage (nach vielen Experimenten) gestellt habe. Die Problemumgehung in meiner eigenen Antwort hat mich durch, aber ich muss es ändern, um mapStateToProps zu übergeben (und zu erweitern). –