反应渲染递归停止没有错误
React rendering recursion stops without error
我在 React 中渲染某些元素时遇到了问题。
(我用的是ImmutableJS
)
renderComponents: function(components) {
if(components.isEmpty()) return [];
var table = [];
components.map(function(component) {
table.push(<ComponentTableElement key={ component.get('id') } data={ component } />);
if(component.has('children')) {
var children = component.get('children');
table.concat(this.renderComponents(children));
}
});
return table;
},
当我查找错误时,我发现 this.renderComponents(children)
根本没有 return 任何东西,代码不知何故停止了。
我的意思是在那行之前一切正常,但是在这一行之后,当我尝试 console.log
某些东西时,它没有出现。它甚至没有达到 return table
.
那段代码有什么问题?
在传递给 map 的函数的上下文中,this
指的是 window
对象,而不是当前组件实例,因此当您尝试时 this.renderComponents
是未定义的叫它。
components.map(function(component) {
this === window;
});
您可以在函数体内传递一个值作为 this
作为 Array::map
的第二个参数。
components.map(function(component) {
table.push(<ComponentTableElement key={ component.get('id') } data={ component } />);
if(component.has('children')) {
var children = component.get('children');
// here, `this` refers to the component instance
table.concat(this.renderComponents(children));
}
}, this);
如果您使用的是 ES6,您还可以使用自动绑定到 this
的粗箭头函数。
components.map((component) => {
table.push(<ComponentTableElement key={ component.get('id') } data={ component } />);
if(component.has('children')) {
var children = component.get('children');
// here, `this` refers to the component instance
table.concat(this.renderComponents(children));
}
});
我在 React 中渲染某些元素时遇到了问题。
(我用的是ImmutableJS
)
renderComponents: function(components) {
if(components.isEmpty()) return [];
var table = [];
components.map(function(component) {
table.push(<ComponentTableElement key={ component.get('id') } data={ component } />);
if(component.has('children')) {
var children = component.get('children');
table.concat(this.renderComponents(children));
}
});
return table;
},
当我查找错误时,我发现 this.renderComponents(children)
根本没有 return 任何东西,代码不知何故停止了。
我的意思是在那行之前一切正常,但是在这一行之后,当我尝试 console.log
某些东西时,它没有出现。它甚至没有达到 return table
.
那段代码有什么问题?
在传递给 map 的函数的上下文中,this
指的是 window
对象,而不是当前组件实例,因此当您尝试时 this.renderComponents
是未定义的叫它。
components.map(function(component) {
this === window;
});
您可以在函数体内传递一个值作为 this
作为 Array::map
的第二个参数。
components.map(function(component) {
table.push(<ComponentTableElement key={ component.get('id') } data={ component } />);
if(component.has('children')) {
var children = component.get('children');
// here, `this` refers to the component instance
table.concat(this.renderComponents(children));
}
}, this);
如果您使用的是 ES6,您还可以使用自动绑定到 this
的粗箭头函数。
components.map((component) => {
table.push(<ComponentTableElement key={ component.get('id') } data={ component } />);
if(component.has('children')) {
var children = component.get('children');
// here, `this` refers to the component instance
table.concat(this.renderComponents(children));
}
});