主要功能如下,这将导致' setState'不是有效的财产例外。
at()
api.js的片段如下。 主函数调用Api.daysOfMonth(...),Api.daysOfMonth将使用全局对象调用ajax方法并使用协议应用调用回调函数,回调函数从main函数传入如上脚本。
componentWillMount = function () {
api.daysOfMonth(this, this.props.month, this.props.year, function (ds) {
var days = [];
ds.forEach(function (jsonDay) {
var day = {date: jsonDay.date, inRange: jsonDay.inRange};
days.push(day);
});
this.setState({ daysOfMonth: days });
});

答案 0 :(得分:1)
如果这确实回答了您的问题,原因是因为.bind()
将新创建的函数的this
绑定到您作为第一个参数传递的函数。
componentWillMount = function () {
api.daysOfMonth(this, this.props.month, this.props.year, function (ds) {
var days = [];
ds.forEach(function (jsonDay) {
var day = {date: jsonDay.date, inRange: jsonDay.inRange};
days.push(day);
});
this.setState({ daysOfMonth: days });
}.bind(this));
另请参阅:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind
请注意,如果你编写es6,你可以使用箭头功能做同样的事情。
componentWillMount = function () {
api.daysOfMonth(this, this.props.month, this.props.year, (ds) => {
var days = [];
ds.forEach(function (jsonDay) {
var day = {date: jsonDay.date, inRange: jsonDay.inRange};
days.push(day);
});
this.setState({ daysOfMonth: days });
});
简而言之,箭头函数中的this
是词法范围,这意味着this
保证与定义箭头函数的this
相同。
另请参阅:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions