使用next.js与redux时,如何在服务器端getInitialProps中获取数据?

我在用next.js &redux搭建一个web应用,想在刷新或访问页面时直接输入url地址来获取数据。

我在getInitialProps中放了一个 "getItems "的动作,这样在刷新页面的时候就会自动触发,但是一直没有效果。

如果在页面刷新后,我手动点击 "getItems "动作按钮,它就会从DB中加载数据,所以我猜动作功能工作正常。

但是如何在刷新页面时自动获取数据呢?

import Head from 'next/head'
import Link from 'next/link'
import { connect } from 'react-redux'
import { getItems } from '../../store/actions/itemAction'

const Index = props => {
  return (
    <>
      <Head>
        <title>Item List</title>
      </Head>
      <div>
        <Button onClick={() => props.getItems()}>Get Items!</Button>
      </div>
    </>
  )
}

Index.getInitialProps = async ({ store }) => {
  await store.dispatch(getItems())
  return {}
}

const mapStateToProps = state => ({
  goods: state.item.goods,
})

const mapDispatchToProps = dispatch => ({
  getItems: () => dispatch(getItems())
})

export default connect(mapStateToProps, mapDispatchToProps)(Index)

0
投票

根据每当应用程序被刷新时哪个组件在挂载,你必须确保不管是什么动作在获取数据,都在componentDidMount中被调用。例如,看看下面我的App.js,我在其中调用了componentDidMount。

   class App extends React.Component {

      componentDidMount = () => {
        this.props.persistUser()
        this.props.fetchAndSetAllPosts()
        console.log('refreshed')
      }
}

我从Actions文件夹中导入了fetch函数 "this.props.fetchAndSetAllPosts()",这是一个从API中获取数据的动作。每次刷新页面时,组件都会挂载,因此,应该执行你在componentDidMount中调用的任何内容。 console.log()一个消息,以确定它是正确触发的。如果这有帮助,请告诉我! 祝您好运