私はNext.jsアプリケーションにreduxインテグレーションを追加しようとしていますが、すべきだ。実装はthe official nextjs redux exampleに基づいています。Next.js + Reduxサーバー側レンダリング:データはありますが、サーバー側ではレンダリングされません。
最後に、ページがサーバーから戻ってくると、そのデータはJSONデータとして出力されますが、このデータに基づく実際のレンダリングは行われませんでした。奇妙なことは、私がreduxを使用する前に、です。コンテンツDIDは、それがであるべき方法でレンダリングされます。
もちろん、Reactのチェックサム警告も表示されています。これは、サーバー上のマークアップが異なることを示しています。
サーバ側で正しく動作させる方法がわかりません。私が紛失しているものがありますか?ここで
がNext.jsによって生成されたHTMLです:あなたが見ることができるように、initialState
値が移入され
<h1 data-reactid="3">Test page</h1>
</div></div></div><div id="__next-error"></div></div><div><script>
__NEXT_DATA__ = {"props":{"isServer":true,"store":{},
"initialState":{"authors":{"loading":false,"items":{"4nRpnr66B2CcQ4wsY04CIQ":… }
,"initialProps":{}},"pathname":"/test","query":{},"buildId":1504364251326,"buildStats":null,"assetPrefix":"","nextExport":false,"err":null,"chunks":[]}
module={}
__NEXT_LOADED_PAGES__ = []
__NEXT_LOADED_CHUNKS__ = []
__NEXT_REGISTER_PAGE = function (route, fn) {
__NEXT_LOADED_PAGES__.push({ route: route, fn: fn })
}
__NEXT_REGISTER_CHUNK = function (chunkName, fn) {
__NEXT_LOADED_CHUNKS__.push({ chunkName: chunkName, fn: fn })
}
</script><script async="" id="__NEXT_PAGE__/test" type="text/javascript" src="/_next/1504364251326/page/test"></script><script async="" id="__NEXT_PAGE__/_error" type="text/javascript" src="/_next/1504364251326/page/_error/index.js"></script><div></div><script type="text/javascript" src="/_next/1504364251326/manifest.js"></script><script type="text/javascript" src="/_next/1504364251326/commons.js"></script><script type="text/javascript" src="/_next/1504364251326/main.js"></script></div></body></html>
、それは必要なすべてのデータが含まれていますが、DOMはまだ空を示して!
domをクライアント側でレンダリングすると、jsは最初のコンテンツを取得し、ロードされたコンテンツを含むページを再配置します。
はここに私のテストページのJSファイルです:
export const fetchAll = dispatch => {
dispatch({
type: LOADING_ALL
})
return axios.get('/api/frontpage')
.then(response => {
const data = response.data
dispatch({
type: RESET_AUTHORS,
payload: data.authors
})
dispatch({
type: RESET_PLANTS,
payload: data.plants
})
dispatch({
type: RESET_POSTS,
payload: data.posts
})
});
}
が
これで任意の助けいただければ幸いです、私は:それは価値がある
import React from 'react'
import map from 'lodash.map';
import { initStore } from '../lib/store';
import * as actions from '../lib/actions';
import withRedux from 'next-redux-wrapper';
class IndexPage extends React.PureComponent {
static getInitialProps = ({ store, req }) => Promise.all([
store.dispatch(actions.fetchAll)
]).then(() => ({}))
render() {
const latestPlants = this.props.plants.latest || [];
return (
<div>
<h1>Test page</h1>
{ map(this.props.plants.items, p => (
<div>{p.fields.name}</div>
))}
</div>
)
}
}
export default withRedux(initStore, data => data, null)(IndexPage)
何のために、ここで私は上記の呼び出しアクションですこの仕事を期待どおりにする方法を失ってしまいました。誰でもリードがありますか?私が明確にすることができるものがあればコメントしてください。
が、私は問題が私の店で、Immutable.jsを使用して私には関係している実現が、私はまさにこの理由を見つけるためには至っていません問題を引き起こす – Marco