2017-05-22 18 views
1

私はバニラリアクションUIコンポーネントライブラリとMobXをアプリケーションの状態管理として使用しています。私がデータとして配列の観測値を持っていて、コンポーネント(mobx-reactobserver)からUIライブラリのコンポーネント(小道具がPropTypes.arrayの型)に渡す場合、コンポーネントはそれを観測可能な配列はオブジェクトであり、配列ではありません。配列のMobX @ ObservableをReactコンポーネントProptypes.arrayのコンポーネントpropsに渡す

// 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, 
    .... 
    } 
} 

私はこれと同様のquestionでmobxからtoJSの使用について読んだが、これを回避する他の方法はありますか?私はUIライブラリの所有者ではないので、その質問に記載されているmobx-reactパッケージに入っているPropTypes検証を回答として追加することはできません。 UIライブラリは、その小道具の入力としてtoJSで変更に反応しますか? mobx配列は、実際のオブジェクトであるため、https://github.com/mobxjs/mobx-react#proptypes

+0

他の方法はないと思います。 –

答えて

2

は、あなたが使用できる、propTypesそれ自身で船をmobx反応します。

ドキュメントには、あなたのような状況が発生したときに必ずデータを渡す必要があります。

data.slice() 

通常のアレイにするためです。問題の図書館にはオブザーバーのデコレーターも不足している可能性が高いので、反応性のあるオブザーバブルを渡しても機能しません。したがって、これを非反応的なデータとして扱うか、この必要性に対応するためにライブラリをフォークする必要があります。

+0

Thx @mweststrate、私は 'mobx-react'が独自のpropTypeを持っていることは知っていますが、コンポーネントライブラリ用です。一方、私は 'mobx-react' propypeを使わないライブラリを使って、その小道具を検証しようとしていますが、配列型の標準的な' prop-types'を使っています。ワークアラウンドはありますか? – panjiesw

+0

ライブラリコンポーネントは、オブザーバ自体を最初から受けていないはずです(オブザーバ自身でない限り)。最も近いサラウンド・オブザーバ・コンポーネントのプレーン・データに変換するだけです – mweststrate

1

それは次のとおりです。

関連する問題