MobXではどのようにすべての値を再設定せずに観測可能アレイ全体に新しい値を設定できますか?MobX観測可能アレイ全体に新しい値を設定するには
まず考えは次のようになります。
let arr = observable([]);
autorun(() => {
console.log('my array changed!');
});
arr = ['foo', 'bar'];
しかし、それはautorun
を発射しません、私はちょうど私のobservable array
を消去し、新しい値/配列に置き換えます。
これを行う正しい方法は何ですか?これ
私の解決策は、セッターと別の変数を使用すること、及びセッター関数内観察アレイインデックスによってインデックス、インデックスを追加および削除、置き換えを変更ました。このように:
const {observable, computed, extendObservable} = mobx;
const {observer} = mobxReact;
const {Component} = React;
const {render} = ReactDOM
const {autorun} = mobx
class Store {
@observable entries = [1,2,3,4,5];
set rows(arr) {
// add new values
for (let i = 0, l = arr.length; i < l; i++) {
this.entries[i] = arr[i];
}
// remove rest of entries
let diff = this.entries.length - arr.length;
if (diff > 0) {
while (diff > 0) {
this.entries.pop();
diff--;
}
}
}
}
const store = new Store();
@observer
class App extends Component {
updateRows(){
return this.props.entries.map(
(row, i) => <p key={i}>{row}</p>
);
}
render() {
const rows = this.updateRows();
return <div>{rows}</div>;
}
}
setTimeout(() => {
store.rows = ['foo', 'bar'];
document.body.innerHTML += 'Timeout fired...';
}, 1000);
render(
<App entries={store.entries} />,
document.getElementById('mount')
);
は、これは正しい方法ですか?
または同じ変数を使用して配列全体に値を再割り当てする方法がありますか?