From fac0033393c990f22e317861cbe4ef9e9ebe8f57 Mon Sep 17 00:00:00 2001 From: ajzeng Date: Fri, 29 May 2020 15:04:51 +0800 Subject: [PATCH] Update getInitialProps.js MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix: 在componentDidMount中injectReducer时候,子组件的didMount是早于父组件执行的,所以子 组件里面想dispatch一些action的时候,由于自定义的reducer还没有inject导致无法生效,这里将inject放 在willMount中可以解决问题 --- src/runtime/getInitialProps.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/runtime/getInitialProps.js b/src/runtime/getInitialProps.js index 30a57f9..476535e 100644 --- a/src/runtime/getInitialProps.js +++ b/src/runtime/getInitialProps.js @@ -23,6 +23,14 @@ export default options => Target => class extends Component { super(props, Target); } + componentWillMount() { + const { store } = this.props; + const { reducer } = options; + if (reducer) { + store.injectReducer(reducer); + } + } + async componentDidMount() { // 该方法在页面浏览器端渲染时会调用 // 在浏览器端动态添加reducer @@ -31,9 +39,6 @@ export default options => Target => class extends Component { if (!promise) { throw new Error('getInitialProps must pass in an object containing the key "promise"'); } - if (reducer) { - store.injectReducer(reducer); - } await promise({ store, match, query }); }