0

ええ、それがsetState()ストアの状態を更新し、すべてのサブスクライバーに変更イベントを発行することは知っていますが、誰もがそれを使用しているわけではなく、状態を更新するときにそれを省略していることがわかります。

たとえば、次の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
        }
    }
}

ただし、公式の 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 });
    }
}

だから私は両方の方法の違いは何だろうと思っていますか?

4

1 に答える 1

3

実際にはありません:

setState は、状態を設定するために Alt によって内部的に使用されます。これをオーバーライドして、独自の setState 実装を提供できます。内部的には、setState は Object.assign のエイリアスです。setState はオブジェクトを返す必要があります。

http://alt.js.org/docs/createStore/#setstate

例: あなたの状態が次のようになっているとしましょう:

{
  city: 'Denver',
  country: 'US',
}

状態を更新する 2 つの方法:

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 =ながら、状態を上書きします。Object.assign()this.setState()を参照してください

于 2016-12-07T14:47:36.757 に答える