HOC 作为 React Redux 的应用程序包装器
HOC as an App Wrapper for React Redux
我想要一个包装每个组件视图的应用程序 HOC。
此 HOC 对用户进行身份验证并设置 Google 分析跟踪。
我正在升级到 Router 4,但无法正常工作。
它给我以下错误 -
TypeError: (0 , _AppWrapper2.default) is not a function
这可能与我创建 HOC 的方式有关。
有什么想法吗?
routes.js
export default (
<Switch>
<Route exact path="/" component={AppWrapper(Home)} />
<Route exact path="/channels" component={AppWrapper(Channels)} />
</Switch>
);
const AppWrapper = (WrappedComponent) => {
return class AppWrapperComponent extends Component {
constructor(props) {
super(props);
}
componentDidMount() {
const page = this.props.location.pathname;
this.trackPage(page);
}
componentWillReceiveProps(nextProps) {
const currentPage = this.props.location.pathname;
const nextPage = nextProps.location.pathname;
if (currentPage !== nextPage) {
this.trackPage(nextPage);
}
}
trackPage = page => {
GoogleAnalytics.set({
page,
...options,
});
GoogleAnalytics.pageview(page);
};
render() {
return (
<div>
{this.state.isMounted && !window.devToolsExtension && process.env.NODE_ENV === 'development' && <DevTools />}
<WrappedComponent {...this.props.chidren} />
</div>
);
}
}
您似乎没有导出 AppWrapper
。如果你用import AppWrapper from ..
导入,在AppWrapper.js
末尾添加这一行:
export default AppWrapper;
或将 const 声明替换为
export default (WrappedComponent) => { ..
如果用import {AppWrapper} from ..
导入,可以在const
前插入一个export
:
export const AppWrapper = (WrappedComponent) => {
我想要一个包装每个组件视图的应用程序 HOC。 此 HOC 对用户进行身份验证并设置 Google 分析跟踪。 我正在升级到 Router 4,但无法正常工作。
它给我以下错误 -
TypeError: (0 , _AppWrapper2.default) is not a function
这可能与我创建 HOC 的方式有关。 有什么想法吗?
routes.js
export default (
<Switch>
<Route exact path="/" component={AppWrapper(Home)} />
<Route exact path="/channels" component={AppWrapper(Channels)} />
</Switch>
);
const AppWrapper = (WrappedComponent) => {
return class AppWrapperComponent extends Component {
constructor(props) {
super(props);
}
componentDidMount() {
const page = this.props.location.pathname;
this.trackPage(page);
}
componentWillReceiveProps(nextProps) {
const currentPage = this.props.location.pathname;
const nextPage = nextProps.location.pathname;
if (currentPage !== nextPage) {
this.trackPage(nextPage);
}
}
trackPage = page => {
GoogleAnalytics.set({
page,
...options,
});
GoogleAnalytics.pageview(page);
};
render() {
return (
<div>
{this.state.isMounted && !window.devToolsExtension && process.env.NODE_ENV === 'development' && <DevTools />}
<WrappedComponent {...this.props.chidren} />
</div>
);
}
}
您似乎没有导出 AppWrapper
。如果你用import AppWrapper from ..
导入,在AppWrapper.js
末尾添加这一行:
export default AppWrapper;
或将 const 声明替换为
export default (WrappedComponent) => { ..
如果用import {AppWrapper} from ..
导入,可以在const
前插入一个export
:
export const AppWrapper = (WrappedComponent) => {