React Redux useEffect 不在初始页面渲染时加载数据

React Redux useEffect not loading data on initial page render

我正在尝试从 api 渲染一个测验对象并使用 useEffect 来这样做,但它似乎不起作用。

这是我的测验组件:

export function Quiz(props) {
  const { 
    quiz, 
    fetchQuiz,
  } = props;

  useEffect(() => {
    fetchQuiz();
  }, [])

  return (
    <div id="wrapper">
      { quiz.question }
    </div>
  )
}

const mapStateToProps = state => {
  return {
    quiz: state.quiz,
  }
}

export default connect(mapStateToProps, {
  fetchQuiz,
})(Quiz)

我的动作创作者:

export function fetchQuiz() {
  return function (dispatch) {
    axios. get('http://localhost:9000/api/quiz/next')
        .then(res => {
          dispatch({ type: SET_QUIZ_INTO_STATE, payload: res.data })
        })
        .catch(err => console.error(err))
    }
}

我的减速器:

const initialQuizState = null
function quiz(state = initialQuizState, action) {
  switch(action.type) {
    case SET_QUIZ_INTO_STATE:
      return action.payload
    default:
      return state
  }
}

因此,当我 console.log 在我的测验组件中“测验”时,我得到了我期望的对象,一切都很好。但是,当我尝试调用“quiz.question”时,出现错误:无法读取 null 的属性(阅读问题)。这让我相信 useEffect 没有正确加载 api 中的数据。我是不是做错了什么?

从 DOM 中的 API 响应访问对象时,请确保您有条件检查是否完成,如下所示:

  return (
    <div id="wrapper">
      { quiz ? quiz.question : 'No Quiz Here' }
    </div>
  )
}