MobX에서 모든 값을 다시 설정하지 않고 관측 가능한 전체 배열에 새 값을 설정하려면 어떻게해야합니까?전체 MobX 관측 가능 배열에 새 값을 설정하는 방법
첫번째 생각은 다음과 같습니다
let arr = observable([]);
autorun(() => {
console.log('my array changed!');
});
arr = ['foo', 'bar'];
그러나이 autorun
를 해고하지 않을, 난 그냥 삭제 것입니다 내 observable array
과 새 값/배열을 대체했다.
이렇게하려면 올바른 방법은 무엇입니까?
이 내 용액 세터와 다른 변수를 사용이고, setter 함수 안에 교체 첨가 인덱스 삭제 인덱스 의해 관찰 배열 인덱스 변경. 이처럼 :
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')
);
이 올바른 방법이 있나요?
또는 동일한 변수를 사용하여 전체 배열에 값을 다시 할당 할 수있는 방법이 있습니까?