原文在这里:How to Export a Connected Component
javascript
根据你在export
的不一样,能够得到一个完美的函数式React-Redux connected组件,或者是一个彻底忽略Redux的组件java
换句话说这里两个彻底不一样的世界:redux
class Thing extends Component { ... }
export default connect(mapStateToProps)(Thing);
复制代码
还有这个:函数
export class Thing extends Component { ... }
connect(mapStateToProps, mapDispatchToProps)(Thing);
复制代码
若是设定为第二个实例,能够注意到全部的React有关的东西,可是Redux的函数,mapStateToProps
和mapDispatchToProps
没有返回测试
connect
不会对组件做出改变在你用connect包装一个组件的时候, 例如connect(...)(Thing)
,重要的一点要理解,虽然返回的是一个connected的组件,可是它根本没有动过原始的Thing组件任何东西.spa
换句话说,运行connect(...)(Thing)
,没有"connect"到Thing
组件,缺失没有. 所作的是翻译一个通过链接的新组件.翻译
因此,在导出组件的时候,必定要定义到底链接的是哪个组件.确保export
关键字出如今 connect
调用的前面,像这样:code
export default connect(...)(Thing);
复制代码
同时导出链接组件和未链接组件很是有效.对于测试大有好处-例如想测试没有没有链接到模拟Redux store的组件.ip
下面是同时导出未链接组件和链接组件的代码:get
export class Thing extends React.Component {
render() {
return "whatever";
}
}
const mapState = state => ({ someValue });
const mapDispatch = { action1, action2 };
export default connect(mapState, mapDispatch)(Thing);
复制代码
注意这里有两个导入,其中之一是名字,另外一个是default,这里的定义很重要,由于会影响到后面的导入(import).
总的原则是,若是某个代码是用exprot default
,在导入的时候不用{}
,;例如:
// Thing.js
export default connect(...)(Thing);
// UserOfThing.js
import Thing from './Thing';
复制代码
若是导出的是名字,须要使用{}
:
// Thing.js
export function Thing() { ... }
// UserOfThing.js
import { Thing } from './Thing';
复制代码