Является ли 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()

Другие вопросы по тегам