2017-05-22 4 views
1

Also verwende ich eine Vanille React UI Komponentenbibliothek und MobX als Statusverwaltung in meiner App. Wenn ich ein Array als Daten beobachte und es von meiner Komponente (das ist ein mobx-reactobserver) an die Komponente der UI-Bibliothek (die Prop ist der Typ PropTypes.array) übergeben, lehnt die Komponente es meine beobachtbare Array sagen ist ein Objekt, kein Array.Weitergabe von MobX @observable von Array zu React Component Props von PropTypes.array

// my store 
class Store { 
    @observable data = [...]; 
} 


// my component 
@inject('store') 
@observer 
class MyComponent extends React.Component { 
    ... 
    render() { 
    const {store} = this.props; 
    return <LibComponent data={store.data} /> 
    } 
} 

// library's component 
class LibComponent extends React.Component { 
    static propTypes = { 
    data: PropTypes.array, 
    .... 
    } 
} 

Ich habe in diesem ähnlich question, über die Verwendung von toJS von mobx lesen, aber ist es eine andere Möglichkeit, dies zu umgehen? Da ich nicht der Besitzer der UI-Bibliothek bin, kann ich PropTypes-Validierungen, die in mobx-react Paket in dieser Frage als Antwort kommen kommen nicht hinzufügen. Reagiert die UI-Bibliothek auf Änderungen mit toJS als Eingabe ihres Props?

+0

Ich denke nicht anders. –

Antwort

2

mobx reagieren Schiffe mit einer eigenen propTypes, die Sie verwenden können: https://github.com/mobxjs/mobx-react#proptypes

+0

Thx @mweststrate, ich weiß, dass 'mobx-react' eigene propTypes hat, aber es ist für die Komponentenbibliothek. In der Zwischenzeit versuche ich, eine solche Bibliothek zu verwenden, die nicht "mobx-react" propTypes verwendet, um ihre Prop zu validieren, sondern einen Standard-Prop-Typen des Array-Typs. Gibt es Workaround? – panjiesw

+0

Bibliothekskomponenten sollten wahrscheinlich überhaupt keine Observablen empfangen (es sei denn, sie sind selbst Beobachter). Konvertieren Sie einfach in reine Daten in der nächsten Surround-Beobachterkomponente – mweststrate

1

Es ist, weil ein mobx Array tatsächlich ein Objekt ist.

Dokumente geben an, dass Daten immer dann weitergegeben werden sollten, wenn eine Situation wie Ihre auftritt;

Um es in ein normales Array zu verwandeln. Da die fragliche Bibliothek höchstwahrscheinlich auch die Beobachterdekoratoren nicht enthält, denke ich, dass selbst wenn Sie das Observable mit seinen reaktiven Eigenschaften durchlassen würden, es nicht funktionieren würde. Daher sollten Sie dies entweder als nichtreaktive Daten behandeln oder die Bibliothek forkieren, um diese Anforderung zu erfüllen.

Verwandte Themen