我将Next.js与Redux一起使用,我需要等到动作创建者完全完成(包括对外部服务器的请求),因此数据已经在初始渲染中。我将尝试在示例中解释这种情况。
我正在使用文档中的示例中的 HOC 并用它包装page
。
因此,您可以在下面看到代码示例:
index.js在pages
文件夹中。
import withRedux from '../utils/withRedux'
import RunningLineContainer from '../src/containers/news/RunningLineContainer'
const IndexPage = () => <RunningLineContainer />
export default withRedux()(IndexPage)
RunningLineContainer.jsx
import React, { Component } from 'react'
import { connect } from 'react-redux'
import RunningLine from '../../components/RunningLine'
import { fetchLatestNews } from '../../actions/wp_news'
class RunningLineContainer extends Component {
componentDidMount() {
if (!this.props.lastestNews) {
this.props.fetchLatestNews('&count=6')
}
}
render() {
const { latestNews, isLoading } = this.props
return <RunningLine data={latestNews} isLoading={isLoading} />
}
}
const mapStateToProps = ({ newsState }) => {
const { latestNews, isLoading } = newsState
return {
latestNews,
isLoading
}
}
export default connect(mapStateToProps, { fetchLatestNews })(RunningLineContainer)
目前,请求是在客户端发出的,因此来自请求的数据不会被服务器呈现,数据内容也不会被搜索引擎看到。我的目标是让这些数据在初始加载时得到响应(由服务器呈现)。
下面的动作创建者代码:
export function fetchLatestNews(params) {
return function (dispatch) {
dispatch({ type: newsTypes.FETCH_WP_LATEST_NEWS_REQUEST })
newsApi.fetchLatestNews(params)
.then(response => {
dispatch({
type: newsTypes.FETCH_WP_LATEST_NEWS_SUCCESS,
payload: response.data,
})
})
.catch(error => {
dispatch({
type: newsTypes.FETCH_WP_LATEST_NEWS_FAILURE,
payload: error,
})
})
}
}
我尝试getInitialProps
在index.js page
中使用静态方法,如下所示:
import withRedux from '../utils/withRedux'
import RunningLineContainer from '../src/containers/news/RunningLineContainer'
const IndexPage = () => <RunningLineContainer />
IndexPage.getInitialProps = async ({ store }) => {
await store.dispatch(fetchLatestNews())
}
export default withRedux()(IndexPage)
不幸的是,它对我不起作用。
我该如何解决这个任务?有什么解决方法吗?
提前致谢!