完全为此感到难过。尝试从HOC触发getInitialProps
,但这样做时我丢失了ctx / reduxStore值?
这是我的代码/上下文:-
我的主页有getInitialProps
,我想触发一个redux传奇,它从git gist中获取一些json-并将其放入redux存储中。数据将通过道具提取并渲染等。
到目前为止,这可行。
但是...主页由HOC(具有身份验证)包装。
据我了解,这意味着{strong>中的getInitialProps
现在不会触发,因为它不再从/ pages中导出-它是从{{1 }}
为了清楚起见,基本上是这样的:
pages / home.js
/HOCs/with-authentication.js
我正在使用的HOC,因此需要以某种方式使用它的静态getInitialProps方法。
/HOCs/with-authentication.js
import React from 'react';
...
import withAuthentication from '../HOCs/with-auth';
class HomePage extends React.Component {
constructor() {
super();
this.state = {};
}
static async getInitialProps({ reduxStore, req }) {
reduxStore.dispatch(fetchJSONFromGist()) <-- dont think i need 'await' here because it doesnt return a promise.
return {}
}
...
...
export default compose(
withAuthentication,
connect(mapState, mapDispatch),
)(HomePage);
因此这实际上可行,它会触发首页import React from 'react';
import hoistNonReactStatic from 'hoist-non-react-statics';
const withAuthenticationHOC = PlatformSpecificComponent => {
class withAuthenticationClass extends React.Component {
constructor(props) {
super(props);
this.state = {};
}
render() {
return (
<PlatformSpecificComponent {...this.props} />
);
}
}
hoistNonReactStatic(withAuthenticationClass, PlatformSpecificComponent);
// ^^ hoisting static methods from the HomePage i'm wrapping with the HOC ^^
if (withAuthenticationClass.getInitialProps) {
withAuthenticationClass.getInitialProps()
}
// ^^ if the class has a getInitialProps method, fire it off
//
return compose(
withFirebaseHOC
connect(
null,
mapDispatchToProps
)
)(withAuthenticationClass);
};
export default withAuthenticationHOC;
,但是如果我尝试添加类似getInitialProps
的参数,那么我就可以触发reduxStore
了,它们就不在了。
要使其正常工作,我必须从HomePage中使用身份验证删除,然后HomePage的dispatch()
正常运行。
我如何获得reduxStore和req(如果需要req?)可用于HOC级别?
在HOCified页面上使用static async getInitialProps({ reduxStore, req }) {...
有更简单的方法吗?
我所见过的一切似乎都失败了:(