我尝试在Alt Store中返回类实例,但它总是返回Javascript Object,而不是类实例。这是getState()的默认行为吗?如何返回类实例?
import alt from '../alt';
import ScheduleActions from '../actions/ScheduleActions.js';
import ScheduleApiUtils from '../utils/ScheduleApiUtils';
class ScheduleStore {
constructor() {
this.state = {
test: new String("test")
}
console.log(this.state.test instanceof String); // return true
}
static getSchedules() {
console.log(this.getState().test instanceof String); // return false
}
}
export default alt.createStore(ScheduleStore, 'ScheduleStore');
答案 0 :(得分:0)
这不是React特有的。这就是javascript的运作方式。尝试打开控制台并询问类型:
typeof "test"
typeof {}
typeof []
typeof true
typeof false
如果您想检查javascript中的类型,可能需要查看http://javascript.info/tutorial/type-detection
答案 1 :(得分:0)
首先,在JavaScript中,字符串文字原语和String
类的类型不同。换句话说,字符串文字不是String
:
console.log("test" instanceof String) // false
console.log(new String("test") instanceof String) // true
其次,从Store#getState()
上的Alt文档中,它会返回数据的副本:
调用[
getState
]后,它会执行商店状态的浅表副本, 这样你就不会意外地覆盖/改变你的任何商店 状态。
我不确切地知道Alt是如何在内部复制这个副本的,但我认为它不是使用new String()
来复制字符串值,但是它确实执行复制是将它们转换为字符串文字类型。
使用new String()
而不是字符串文字在JavaScript中不常见。