[英]factory functions for React components
我一直在阅读Eric Elliott的一些有关React的文章,以及他如何在工厂函数中包装组件:
如果您已阅读其中一篇文章,则可能会看到类似于以下示例代码:
const productFactory = ( { React, PropTypes } ) => {
const Product = ( props ) => {
return {
props,
render() {
const { name, description, price, quantity, _id } = this.props.product
return (
<div className="col-md-4 col-sm-6 col-xs-12 product">
<div className="product-content">
<div className="product-head">
<div className="product-title">
{ name }
</div>
<div className="product-description">
{ description }
</div>
</div>
<div className="product-price">
$ { price }
</div>
<button className="btn-std btn-qty" onClick={ () => { this.props.removeProduct( _id ) } }>-</button>
<span className="qty">{ quantity }</span>
<button className="btn-std btn-qty" onClick={ () => { this.props.addProduct( _id ) } }>+</button>
</div>
</div>
)
}
}
}
Product.propTypes = {
product: PropTypes.object.isRequired,
addProduct: PropTypes.func.isRequired,
removeProduct: PropTypes.func.isRequired,
}
return Product
}
export default productFactory
这些文章的作者谈到了这种模式:
我为所有组件导出工厂,而不是直接自己导出组件。 这提供了两个优点:
1)我总是在options
对象上传递React
,所以组件不需要导入潜在冲突的React
或假设React可以作为全局对象使用。 < -https://medium.com/@dan_abramov/two-weird-tricks-that-fix-react-7cf9bbdef375#95b7
2)您可以通过options
哈希中的所有组件中继所需的任何内容,所有组件都可以访问它。 <-甚至由您的应用程序共享CSS样式
我不了解的部分是当他说“ 您可能还会注意到该组件对事件侦听器的功能没有任何概念。我在这里使用了一个技巧,可以使该组件真正易于在任何情况下进行测试和重用。应用程序-我将它包装在工厂函数中 。 “
为什么使用模块输出实际组件而不是工厂功能的方法更容易测试和重用?
非常感谢!
这种使用工厂的方法通常是处理依赖项注入(DI)和控制反转(IoC)。
创建组件时,所有依赖关系和行为都是一成不变的。 但是通过这种方法,您可以将它们分开。 您可以创建一个具有相同模板但行为和依赖关系不同的新组件。
开发几乎没有优势,但在测试中将非常有用。 发展中
供测试用
根据我的理解,这些就是我可以立即想到的一些优点,以及为什么作者推荐这种方法。 但是实际的作者可能也有使用此方法的不同意图。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.