5

次のように、MobXの監視可能な配列を使用して、ネイティブに反応するListViewを作成しようとしています。

constructor(props) {
        super(props)
        var dataSource = new ListView.DataSource({ rowHasChanged: (r1, r2) => r1 !== r2 });
        let dogs = props.store.dogs;
        this.state = { dogs: dogs, dataSource: dataSource };
    }

    render() {

        var dogs = this.state.dogs;
        var dataSource = this.state.dataSource.cloneWithRows(dogs);

        return <ListView
            dataSource={dataSource}
            renderRow={this.renderRow}
            />
    }

しかし、コードを実行すると、renderRow() が呼び出されることはありません。cloneWithRows() メソッドが行を複製する方法を知らなかったようです。

誰かがこれを行うことに成功しましたか? (また、犬のリスト内の犬の名前が変更されたときに、リスト内のセルが再レンダリングされるように動作させることもできます)

更新: 詳細はこちらhttps://github.com/mobxjs/mobx/issues/476

4

1 に答える 1

1

私の記憶が正しければ、犬をスライスする必要があります (笑)dogs.slice()そうしないと、ListView はそれを適切な配列として認識しません。によってレンダリングされるコンポーネントはrenderRow、非同期的に呼び出される可能性があるため、オブザーバー コンポーネントである必要がある場合もあります。

renderスライスはコンストラクタではなくメソッドで行う必要があることに注意してください。コンポーネントが構築されたときだけでなく、コレクションが変更されるたびに発生するようにします。

参照: https://github.com/mobxjs/mobx/issues/476

于 2016-08-23T15:23:59.397 に答える