React Hooks useState Array为空,组件中呈现状态

时间:2020-05-05 13:12:44

标签: javascript reactjs react-hooks use-state

我遇到这样的情况,我可以使用reducers成功地调度状态,并且可以将其呈现在组件中

这里是相关代码

在我的action/index.js

export const receivedLeaguesList = json => ({
  type: RECEIVE_LEAGUES_LIST,
  json: json
});

export function fetchLeaguesList() {
  return function(dispatch) {
    dispatch(requestLeaguesList());
      return axios
        .get("https://www.api-football.com/demo/v2/leagues/")
        .then(res => {
          let leagues = res.data.api.leagues;
          dispatch(receivedLeaguesList(leagues));
        })
        .catch(e => {
          console.log(e);
        });
    }
}

我的reducers/index.js

import { REQUEST_LEAGUES_LIST, RECEIVE_LEAGUES_LIST } from "../actions";

const initialState = {
  leaguesList: [],
  isLeagueListLoading: false
};

const reducer = (state = initialState, action) => {
  switch (action.type) {
    case REQUEST_LEAGUES_LIST:
      return { ...state, isLeagueListLoading: true };
    case RECEIVE_LEAGUES_LIST:
      return { ...state, leaguesList: action.json, isLeagueListLoading: false };
    default:
      return state;
  }
};

在我的组件component/Leagues.js

let Leagues = ({ leaguesList, loading, getList }) => {
  useEffect(() => {
    getList();
  }, [getList]);


  const [itemsLeagues] = useState([leaguesList]);

  console.log("league list", itemsLeagues);

const mapDispatchToProps = {
  getList: fetchLeaguesList
};

我已在此处复制了演示=> https://codesandbox.io/s/select-demo-71u7h

我可以在执行地图的组件中渲染leaguesList状态,但为什么要

  const [itemsLeagues] = useState([leaguesList]);

  console.log("league list", itemsLeagues); 

返回一个空数组?

查看图片enter image description here

1 个答案:

答案 0 :(得分:2)

您将useState的init值设置为错误:

 const [itemsLeagues] = useState(leaguesList);

代替

 const [itemsLeagues] = useState([leaguesList]);

useState的返回值不是值本身,而是值和mutator的数组:

const [value, setValue] = useState([42, 43])
// here's value equals [42, 43]

因此,如果您试图对传递给useState()的包装数组进行解构,则应像这样使用它(尽管不需要它):

const [[itemsLeagues]] = useState([leaguesList]);