【发布时间】:2018-12-30 18:12:23
【问题描述】:
如果数据不可用,我已经创建了更高阶的组件来渲染加载器。 Loader 组件是高阶组件。 ContactList 组件调用高阶组件。 我的 ContactList 组件代码:
import React, { Component } from 'react';
import '../App.css';
import Loader from './hoc/Loader.js';
class ContactList extends Component {
constructor(props) {
super(props);
this.state = {
}
}
render() {
return (
<div className="App">
{
this.props.contacts.map((contact, index) => (
<div key={index}>
<p>{contact.name}</p>
</div>
))
}
</div>
);
}
}
export default Loader(this.props.contacts)(ContactList);
Loader(HOC) 组件的代码 -
import React, { Component } from 'react';
import './Loader.css';
const Loader = (propName) => (WrappedComponent) => {
return class Loader extends Component {
isEmpty(prop) {
return (
prop === null ||
prop === undefined ||
(prop.hasOwnProperty('length') && prop.length === 0) ||
(prop.constructor === Object.keys(prop).length === 0)
);
}
render() {
return this.isEmpty(propName) ? <div className="loader"></div> : <WrappedComponent {...this.props}/>
}
}
}
export default Loader;
但是我收到了这个错误
未捕获的类型错误:无法读取未定义的属性“联系人” 因为在课堂外无法访问道具。
我尝试了很多解决方案 -
2) 如果我将导出语句更改为export default Loader(ContactList),那么这可以正常工作,但加载器组件不再可重用
【问题讨论】:
-
我们可以将contacts有一个prop传递给ContactList对吗?
-
是的,contactList 组件正在通过 props 获取联系人数组。现在我想将它发送到高阶组件
标签: reactjs react-native higher-order-functions higher-order-components