0
是的,我知道setState()
更新了商店的狀態並向所有訂戶發出了更改事件,但我發現不是每個人都使用它並在更新狀態時省略它。setState()是否可選,用於更新Alt.js存儲中的狀態?
例如在下面的alt-todo repo,他們不使用setState()
:
class TodoStore {
constructor() {
this.bindActions(TodoActions);
this.todos = {};
}
onCreate(text) {
text = text.trim()
if (text === '') {
return false
}
// hand waving of course.
const id = (+new Date() + Math.floor(Math.random() * 999999)).toString(36)
this.todos[id] = {
id: id,
complete: false,
text: text
}
}
}
然而在official alt.js repo他們使用它:
class LocationStore {
constructor() {
this.bindAction(locationActions.updateLocation, this.onUpdateLocation);
this.state = {
city: 'Denver',
country: 'US'
};
}
onUpdateLocation(obj) {
const { city, country } = obj
this.setState({ city, country });
}
}
所以我不知道有什麼差異兩種方式?
因此,如果'this.setState()'被忽略,那麼它被默認調用,對吧? –
不會。你只會覆蓋整個狀態而不是合併它。 – MoeSattler
我也注意到直接賦值狀態並不總是激發'emitChange()' – Avdept