Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的动作创建者不在下一个js中将数据发送到redux商店?_Javascript_Reactjs_Redux_Next.js - Fatal编程技术网

Javascript 为什么我的动作创建者不在下一个js中将数据发送到redux商店?

Javascript 为什么我的动作创建者不在下一个js中将数据发送到redux商店?,javascript,reactjs,redux,next.js,Javascript,Reactjs,Redux,Next.js,我刚开始第一次使用NextJS,我正在尝试将它与Redux一起使用。 我已经能够在index.js中设置redux和getServerSideProps函数。 然而,问题是,即使在我获取数据之后,存储仍然返回空状态。当我将从getServerSideProps函数中获取的数据记录到console.log中时,我在终端中看到了它,因此我怀疑问题在于我的操作创建者没有将数据发送到存储区。我甚至尝试使用redux thunk从action creator内部处理数据获取和发送,但这也不起作用。拜托,我

我刚开始第一次使用NextJS,我正在尝试将它与Redux一起使用。 我已经能够在index.js中设置redux和getServerSideProps函数。 然而,问题是,即使在我获取数据之后,存储仍然返回空状态。当我将从getServerSideProps函数中获取的数据记录到console.log中时,我在终端中看到了它,因此我怀疑问题在于我的操作创建者没有将数据发送到存储区。我甚至尝试使用redux thunk从action creator内部处理数据获取和发送,但这也不起作用。拜托,我真的需要一些帮助

我的行动创造者:

export const initializeArticles = (articles) => {
  return {
    type: 'INITARTICLES',
    data: articles
  }
}
我的减速机:

const articlesReducer = (state = initialState, action) => {
  switch (action.type) {
    case 'INITARTICLES':
      return action.data

    case 'ADDARTICLE':
      return state.concat(action.data)

    case 'INCREMENTARTICLELIKES':
      return state.map((article) => {
        if(article.id === action.id) {
          return {
            ...article,
            likes: article.likes + 1
          }
        } else {
          return article
        }
      })

    case 'DELETEARTICLE':
      return state.filter(article => article.id !== action.id)

    case 'ADDCOMMENT':
      return state.map((article) => {
        if (article.id === action.id) {
          return {
            ...article,
            comments: article.comments.concat(action.data)
          }
        } else {
          return article
        }
      })

    case 'APPROVECOMMENT':
      return state.map((article) => {
        if (article.id === action.articleId) {
          return article.commentIsApproved = true
        } else {
          return article.commentIsApproved = false
        }
      })

    default:
      return state
  }
}

export default articlesReducer
我的店铺设置:

let store;

const initstore = (initialState) => {
  return createStore(
    rootReducer,
    initialState,
    composeWithDevTools(applyMiddleware(thunk))
  )
}

export const initializeStore = (preloadedState) => {
  let _store = store ?? initstore(preloadedState)

  if (preloadedState && store) {
    _store = initstore({
      ...store.getState(),
      ...preloadedState
    })

    store = undefined
  }

  if(typeof window === 'undefined') return _store
  if(!store) store = _store

  return _store
}

export function useStore(initialState) {
  const store = useMemo(() => initializeStore(initialState), [initialState])
  return store
}
My getServerSideProps函数:

export const getServerSideProps = () => {
  const reduxStore = initializeStore()
  const { dispatch } = reduxStore
  getPosts().then((posts) => {
    console.log(posts)
    dispatch(initializeArticles(posts))
  })

  return { props: { initialReduxState: reduxStore.getState() } }
}

export default Home

您正在调用您的创建者,但没有参数。实际上我是用参数调用它的,只是在发布时忘记将其添加到代码中,我只是在尝试redux-thunk时暂时删除了该参数。您绝对不应该在那里调用此
const reduxStore=initializeStore()
。我建议使用google react redux示例应用程序。我在这里找到了代码示例:根据每次调用getserversideProps时商店初始化的名称判断。这是一种误导。我会找到不同的例子。