Является ли setState() необязательным для обновления состояния в хранилище Alt.js?
Да, я знаю это setState()
обновляет состояние магазина и отправляет событие изменения всем подписчикам, но я обнаруживаю, что не все его используют, и пропускаю его при обновлении состояния.
Например, в следующем репозитории alt-todo они не используют 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
}
}
}
Однако в официальном репозитории alt.js они используют его:
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 });
}
}
Так что мне интересно, какая разница в обоих направлениях?
1 ответ
На самом деле его нет:
setState используется Alt для установки состояния. Вы можете переопределить это, чтобы предоставить собственную реализацию setState. Внутренне setState является псевдонимом для Object.assign. setState должен вернуть объект.
http://alt.js.org/docs/createStore/
Пример: допустим, ваше состояние:
{
city: 'Denver',
country: 'US',
}
Два способа обновления состояния:
this.setState({city: 'Colorado Springs'})
console.log(this.state) // {city: 'Colorado Springs', country: 'US' })
this.state = { city: 'Elbert' }
console.log(this.state) // state is {city: 'Elbert'}
Как вы видете, this.state =
перезаписывает состояние, а this.setState()
сливает новое государство в старое. Смотрите Object.assign()