我遇到这样的情况,我可以使用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);
返回一个空数组?
答案 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]);