首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >setState()对于更新Alt.js存储中的状态是可选的吗?

setState()对于更新Alt.js存储中的状态是可选的吗?
EN

Stack Overflow用户
提问于 2016-12-07 14:43:28
回答 1查看 1.1K关注 0票数 0

是的,我知道setState()更新商店的状态并向所有订阅者发出更改事件,但我发现不是每个人都使用它,在更新状态时忽略它。

例如,在下面的alt-todo回购中,它们不使用setState()

代码语言:javascript
复制
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回购中,他们使用它:

代码语言:javascript
复制
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 });
    }
}

,所以我想知道这两种方式有什么区别?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-07 14:47:36

没有一个,真的:

Alt内部使用setState来设置状态。您可以重写它以提供您自己的setState实现。在内部,setState是Object.assign的别名。setState必须返回一个对象。

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

举个例子:假设你的状态是:

代码语言:javascript
复制
{
  city: 'Denver',
  country: 'US',
}

更新状态的两种方法:

代码语言:javascript
复制
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()

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41020355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档